diff --git a/Convert_VFP9_BIN_2_PRG.vbs b/Convert_VFP9_BIN_2_PRG.vbs new file mode 100644 index 0000000..7e9e6b5 --- /dev/null +++ b/Convert_VFP9_BIN_2_PRG.vbs @@ -0,0 +1,128 @@ +'--------------------------------------------------------------------------------------------------- +' Convert_VFP9_BIN_2_PRG.vbs - 03/01/2014 - Fernando D. Bozzo (fdbozzo@gmail.com) +'--------------------------------------------------------------------------------------------------- +' ENGLISH: +' USE: Copy this file in the same directory of FoxBin2prg and create a shortcut +' on user's "SendTo" folder +' +' ESPAÑOL: +' USO: Copie este archivo en el mismo directorio que FoxBin2prg y cree un acceso directo +' en la carpeta "SendTo" del usuario +'--------------------------------------------------------------------------------------------------- +Const ForReading = 1 +Dim WSHShell, FileSystemObject +Dim oVFP9, nExitCode, cEXETool, cCMD, nDebug, cConvertType, aExtensions(8), foxbin2prg_cfg +Dim i, x, str_cfg, aConf +Set WSHShell = WScript.CreateObject("WScript.Shell") +Set FileSystemObject = WScript.CreateObject("Scripting.FileSystemObject") +Set oVFP9 = CreateObject("VisualFoxPro.Application.9") +cConvertType = "BIN2PRG" +foxbin2prg_cfg = Replace(WScript.ScriptFullName, WScript.ScriptName, "foxbin2prg.cfg") +nExitCode = 0 +'--------------------------------------------------------------------------------------------------- +nDebug = 1 '0=OFF, 1=Create FoxBin2prg LOG, 2=Only show calls, 3=Only show calls of the LOG call +'--------------------------------------------------------------------------------------------------- + +If cConvertType = "BIN2PRG" Then + aExtensions(1) = "PJX" + aExtensions(2) = "VCX" + aExtensions(3) = "SCX" + aExtensions(4) = "FRX" + aExtensions(5) = "LBX" + aExtensions(6) = "DBF" + aExtensions(7) = "DBC" + aExtensions(8) = "MNX" +Else + '-- Extensiones TXT por defecto + aExtensions(1) = "PJ2" + aExtensions(2) = "VC2" + aExtensions(3) = "SC2" + aExtensions(4) = "FR2" + aExtensions(5) = "LB2" + aExtensions(6) = "DB2" + aExtensions(7) = "DC2" + aExtensions(8) = "MN2" + + If FileSystemObject.FileExists( foxbin2prg_cfg ) Then + '-- Existe el archivo de configuración foxbin2prg.cgf + Set objTextFile = FileSystemObject.OpenTextFile( foxbin2prg_cfg, ForReading ) + + Do Until objTextFile.AtEndOfStream + strNextLine = objTextFile.Readline + arrFb2p_CFG = Split(strNextLine , ",") + For i = 0 to Ubound(arrFb2p_CFG) + If Left( arrFb2p_CFG(i), 10 ) = "extension:" Then + 'Wscript.Echo "CFG line: " & arrFb2p_CFG(i) + aConf = Split( arrFb2p_CFG(i), ":" ) 'Obtengo la separación de "extensión:" y "ext:equiv" + str_cfg = UCase( Trim( aConf(1) ) ) + aConf = Split( str_cfg, "=" ) 'Obtengo la separación de extensión y equivalencia (vc2=vca) + 'Wscript.Echo "[" & aConf(0) & "] [" & aConf(1) & "]" + + For x = 1 TO 8 + If aExtensions(x) = aConf(0) Then + aExtensions(x) = UCase( aConf(1) ) + Exit For + End If + Next + Else + 'Wscript.Echo "Saltear: " & arrFb2p_CFG(i) + End If + Next + Loop + End If +End if + +If WScript.Arguments.Count = 0 Then + nExitCode = 1 + MsgBox "Sin parametros" +Else + cEXETool = Replace(WScript.ScriptFullName, WScript.ScriptName, "foxbin2prg.exe") + + For i = 0 To WScript.Arguments.Count-1 + scanDirs( WScript.Arguments(i) ) + Next +End If + +WScript.Quit(nExitCode) + + +Private Sub scanDirs( tcArgument ) + Dim omFolder, oFolder + If FileSystemObject.FolderExists( tcArgument ) Then + '-- Es un directorio + 'WScript.Echo "Argument: " & "[" & tcArgument & "]" + Set omFolder = FileSystemObject.GetFolder( tcArgument ) + 'WScript.Echo "Dir: " & "[" & omFolder.Path & "]" + For Each oFile IN omFolder.Files + 'WScript.Echo "File: " & "[" & oFile.Path & "]" + evaluateFile( oFile.Path ) + Next + For Each oFolder IN omFolder.SubFolders + 'WScript.Echo "SubDir: " & "[" & oFolder.Name & "] [" & oFolder.Path & "]" + scanDirs( oFolder.Path ) + Next + Else + '-- Es un archivo + evaluateFile( tcArgument ) + End If +End Sub + + +Private Sub evaluateFile( tcFile ) + For x = 1 TO 8 + If aExtensions(x) = UCase( FileSystemObject.GetExtensionName( tcFile ) ) Then + If nDebug = 1 OR nDebug = 3 Then + cCMD = "DO " & chr(34) & cEXETool & chr(34) & " WITH '" & tcFile & "','0','0','0','0','1'" + Else + cCMD = "DO " & chr(34) & cEXETool & chr(34) & " WITH " & chr(34) & tcFile & chr(34) + End If + If nDebug = 2 Or nDebug = 3 Then + MsgBox cCMD, 0, "PARAMETROS ENVIADOS" + Else 'nDebug = 0 Or nDebug = 2 + oVFP9.DoCmd( cCMD ) + nExitCode = oVFP9.Eval("_SCREEN.ExitCode") + End If + Exit For + End If + Next +End Sub diff --git a/Convert_VFP9_PRG_2_BIN.vbs b/Convert_VFP9_PRG_2_BIN.vbs new file mode 100644 index 0000000..569d334 --- /dev/null +++ b/Convert_VFP9_PRG_2_BIN.vbs @@ -0,0 +1,128 @@ +'--------------------------------------------------------------------------------------------------- +' Convert_VFP9_PRG_2_BIN.vbs - 03/01/2014 - Fernando D. Bozzo (fdbozzo@gmail.com) +'--------------------------------------------------------------------------------------------------- +' ENGLISH: +' USE: Copy this file in the same directory of FoxBin2prg and create a shortcut +' on user's "SendTo" folder +' +' ESPAÑOL: +' USO: Copie este archivo en el mismo directorio que FoxBin2prg y cree un acceso directo +' en la carpeta "SendTo" del usuario +'--------------------------------------------------------------------------------------------------- +Const ForReading = 1 +Dim WSHShell, FileSystemObject +Dim oVFP9, nExitCode, cEXETool, cCMD, nDebug, cConvertType, aExtensions(8), foxbin2prg_cfg +Dim i, x, str_cfg, aConf +Set WSHShell = WScript.CreateObject("WScript.Shell") +Set FileSystemObject = WScript.CreateObject("Scripting.FileSystemObject") +Set oVFP9 = CreateObject("VisualFoxPro.Application.9") +cConvertType = "PRG2BIN" +foxbin2prg_cfg = Replace(WScript.ScriptFullName, WScript.ScriptName, "foxbin2prg.cfg") +nExitCode = 0 +'--------------------------------------------------------------------------------------------------- +nDebug = 1 '0=OFF, 1=Create FoxBin2prg LOG, 2=Only show calls, 3=Only show calls of the LOG call +'--------------------------------------------------------------------------------------------------- + +If cConvertType = "BIN2PRG" Then + aExtensions(1) = "PJX" + aExtensions(2) = "VCX" + aExtensions(3) = "SCX" + aExtensions(4) = "FRX" + aExtensions(5) = "LBX" + aExtensions(6) = "DBF" + aExtensions(7) = "DBC" + aExtensions(8) = "MNX" +Else + '-- Extensiones TXT por defecto + aExtensions(1) = "PJ2" + aExtensions(2) = "VC2" + aExtensions(3) = "SC2" + aExtensions(4) = "FR2" + aExtensions(5) = "LB2" + aExtensions(6) = "DB2" + aExtensions(7) = "DC2" + aExtensions(8) = "MN2" + + If FileSystemObject.FileExists( foxbin2prg_cfg ) Then + '-- Existe el archivo de configuración foxbin2prg.cgf + Set objTextFile = FileSystemObject.OpenTextFile( foxbin2prg_cfg, ForReading ) + + Do Until objTextFile.AtEndOfStream + strNextLine = objTextFile.Readline + arrFb2p_CFG = Split(strNextLine , ",") + For i = 0 to Ubound(arrFb2p_CFG) + If Left( arrFb2p_CFG(i), 10 ) = "extension:" Then + 'Wscript.Echo "CFG line: " & arrFb2p_CFG(i) + aConf = Split( arrFb2p_CFG(i), ":" ) 'Obtengo la separación de "extensión:" y "ext:equiv" + str_cfg = UCase( Trim( aConf(1) ) ) + aConf = Split( str_cfg, "=" ) 'Obtengo la separación de extensión y equivalencia (vc2=vca) + 'Wscript.Echo "[" & aConf(0) & "] [" & aConf(1) & "]" + + For x = 1 TO 8 + If aExtensions(x) = aConf(0) Then + aExtensions(x) = UCase( aConf(1) ) + Exit For + End If + Next + Else + 'Wscript.Echo "Saltear: " & arrFb2p_CFG(i) + End If + Next + Loop + End If +End if + +If WScript.Arguments.Count = 0 Then + nExitCode = 1 + MsgBox "Sin parametros" +Else + cEXETool = Replace(WScript.ScriptFullName, WScript.ScriptName, "foxbin2prg.exe") + + For i = 0 To WScript.Arguments.Count-1 + scanDirs( WScript.Arguments(i) ) + Next +End If + +WScript.Quit(nExitCode) + + +Private Sub scanDirs( tcArgument ) + Dim omFolder, oFolder + If FileSystemObject.FolderExists( tcArgument ) Then + '-- Es un directorio + 'WScript.Echo "Argument: " & "[" & tcArgument & "]" + Set omFolder = FileSystemObject.GetFolder( tcArgument ) + 'WScript.Echo "Dir: " & "[" & omFolder.Path & "]" + For Each oFile IN omFolder.Files + 'WScript.Echo "File: " & "[" & oFile.Path & "]" + evaluateFile( oFile.Path ) + Next + For Each oFolder IN omFolder.SubFolders + 'WScript.Echo "SubDir: " & "[" & oFolder.Name & "] [" & oFolder.Path & "]" + scanDirs( oFolder.Path ) + Next + Else + '-- Es un archivo + evaluateFile( tcArgument ) + End If +End Sub + + +Private Sub evaluateFile( tcFile ) + For x = 1 TO 8 + If aExtensions(x) = UCase( FileSystemObject.GetExtensionName( tcFile ) ) Then + If nDebug = 1 OR nDebug = 3 Then + cCMD = "DO " & chr(34) & cEXETool & chr(34) & " WITH '" & tcFile & "','0','0','0','0','1'" + Else + cCMD = "DO " & chr(34) & cEXETool & chr(34) & " WITH " & chr(34) & tcFile & chr(34) + End If + If nDebug = 2 Or nDebug = 3 Then + MsgBox cCMD, 0, "PARAMETROS ENVIADOS" + Else 'nDebug = 0 Or nDebug = 2 + oVFP9.DoCmd( cCMD ) + nExitCode = oVFP9.Eval("_SCREEN.ExitCode") + End If + Exit For + End If + Next +End Sub diff --git a/README.txt b/README.txt index 230e7fd..39ea12d 100644 --- a/README.txt +++ b/README.txt @@ -1,4 +1,4 @@ -02/01/2014 FOXBIN2PRG VER.1.16 FOR VISUAL FOXPRO 9 BINARIES Fernando D. Bozzo (fdbozzo@gmail.com) +02/01/2014 FOXBIN2PRG VER.1.17 FOR VISUAL FOXPRO 9 BINARIES Fernando D. Bozzo (fdbozzo@gmail.com) ESPAÑOL -------------------------------------------------------------------------------------------- diff --git a/TESTS/DATOS_READONLY/menu1.MNT b/TESTS/DATOS_READONLY/menu1.MNT new file mode 100644 index 0000000..0e068b5 Binary files /dev/null and b/TESTS/DATOS_READONLY/menu1.MNT differ diff --git a/TESTS/DATOS_READONLY/menu1.mnx b/TESTS/DATOS_READONLY/menu1.mnx new file mode 100644 index 0000000..5b374f1 Binary files /dev/null and b/TESTS/DATOS_READONLY/menu1.mnx differ diff --git a/TESTS/DATOS_READONLY/menu2.mnt b/TESTS/DATOS_READONLY/menu2.mnt new file mode 100644 index 0000000..0381262 Binary files /dev/null and b/TESTS/DATOS_READONLY/menu2.mnt differ diff --git a/TESTS/DATOS_READONLY/menu2.mnx b/TESTS/DATOS_READONLY/menu2.mnx new file mode 100644 index 0000000..be3596e Binary files /dev/null and b/TESTS/DATOS_READONLY/menu2.mnx differ diff --git a/TESTS/DATOS_READONLY/menu3.mnt b/TESTS/DATOS_READONLY/menu3.mnt new file mode 100644 index 0000000..1ced079 Binary files /dev/null and b/TESTS/DATOS_READONLY/menu3.mnt differ diff --git a/TESTS/DATOS_READONLY/menu3.mnx b/TESTS/DATOS_READONLY/menu3.mnx new file mode 100644 index 0000000..e056479 Binary files /dev/null and b/TESTS/DATOS_READONLY/menu3.mnx differ diff --git a/TESTS/DATOS_READONLY/menu_shortcut.MNT b/TESTS/DATOS_READONLY/menu_shortcut.MNT new file mode 100644 index 0000000..792bef1 Binary files /dev/null and b/TESTS/DATOS_READONLY/menu_shortcut.MNT differ diff --git a/TESTS/DATOS_READONLY/menu_shortcut.mnx b/TESTS/DATOS_READONLY/menu_shortcut.mnx new file mode 100644 index 0000000..1965878 Binary files /dev/null and b/TESTS/DATOS_READONLY/menu_shortcut.mnx differ diff --git a/TESTS/DATOS_READONLY/menu_shortcut2.MNT b/TESTS/DATOS_READONLY/menu_shortcut2.MNT new file mode 100644 index 0000000..1a47d4c Binary files /dev/null and b/TESTS/DATOS_READONLY/menu_shortcut2.MNT differ diff --git a/TESTS/DATOS_READONLY/menu_shortcut2.mnx b/TESTS/DATOS_READONLY/menu_shortcut2.mnx new file mode 100644 index 0000000..0095dea Binary files /dev/null and b/TESTS/DATOS_READONLY/menu_shortcut2.mnx differ diff --git a/foxbin2prg.pj2 b/foxbin2prg.pj2 index 19cb364..90df5a0 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:21:13" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries) +*< FOXBIN2PRG: Version="1.17" SourceFile="C:\DESA\foxbin2prg\foxbin2prg.pjx" Generated="2014/01/03 16:29:53" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries) * LPARAMETERS tcDir @@ -25,8 +25,8 @@ _LegalCopyright = "Open Source - LICENCIA Creative Commons: Reconocimiento - Co _LegalTrademark = "Open Source" _ProductName = " FOXBIN2PRG" _MajorVer = "1" -_MinorVer = "16" -_Revision = " 144" +_MinorVer = "17" +_Revision = " 152" _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="1143083468" ID="1130644423" ObjRev="544" /> + .ADD('foxbin2prg.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="1143178164" ID="1130644423" ObjRev="544" /> * .ITEM('__newproject.f2b').Remove() diff --git a/foxbin2prg.pjt b/foxbin2prg.pjt index 2cf9a08..008199c 100644 Binary files a/foxbin2prg.pjt and b/foxbin2prg.pjt differ diff --git a/foxbin2prg.pjx b/foxbin2prg.pjx index 554a619..21383c3 100644 Binary files a/foxbin2prg.pjx and b/foxbin2prg.pjx differ diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 3a3a9cd..48a98eb 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -54,6 +54,7 @@ * 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) +* 03/01/2013 FDBOZZO v1.17 Agregado Unit Testing de menús y arreglo de las incidencias del menu * * *--------------------------------------------------------------------------------------------------- @@ -67,7 +68,8 @@ * 07/12/2013 Edgar Kummers REPORTE BUG: Cuando se parsea una clase con un _memberdata largo, se parsea mal y se corrompe el valor (arreglado en v.1.11) * 08/12/2013 Fidel Charny REPORTE BUG: Cuando se convierten algunos reportes da "Error 1924, TOREG is not an object" (arreglado en v.1.13) * 14/12/2013 Arturo Ramos REPORTE BUG: La regeneración de los forms (SCX) no respeta la propiedad AutoCenter, estando pero no funcionando. (arreglado en v.1.14) -* 14/12/2013 Fidel Charny REPORRE BUG: La regeneración de los forms (SCX) no regenera el último registro COMMENT (arreglado en v.1.14) +* 14/12/2013 Fidel Charny REPORTE BUG: La regeneración de los forms (SCX) no regenera el último registro COMMENT (arreglado en v.1.14) +* 01/01/2014 Fidel Charny REPORTE BUG v1.16: El menú no siempre respeta la posición original LOCATION y a veces se genera mal el MNX (se arregla en v1.17) * * *--------------------------------------------------------------------------------------------------- @@ -202,6 +204,8 @@ LPARAMETERS tc_InputFile, tcType_na, tcTextName_na, tlGenText_na, tcDontShowErro #DEFINE C_MENUCODE_F '*' #DEFINE C_MENUTYPE_I '*' #DEFINE C_MENUTYPE_F '' +#DEFINE C_MENULOCATION_I '*' +#DEFINE C_MENULOCATION_F '' *-- #DEFINE C_TAB CHR(9) #DEFINE C_CR CHR(13) @@ -284,6 +288,7 @@ goCnv = CREATEOBJECT("c_foxbin2prg") lnResp = goCnv.ejecutar( tc_InputFile, tcType_na, tcTextName_na, tlGenText_na, tcDontShowErrors, tcDebug ; , '', NULL, NULL, .F., tcOriginalFileName ) +ADDPROPERTY(_SCREEN, 'ExitCode', lnResp) IF _VFP.STARTMODE <= 1 RETURN lnResp ENDIF @@ -307,6 +312,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -322,6 +328,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -343,11 +350,12 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM *-- - n_FB2PRG_Version = 1.16 + n_FB2PRG_Version = 1.17 *-- c_Foxbin2prg_FullPath = '' c_CurDir = '' c_InputFile = '' + c_OriginalFileName = '' c_LogFile = '' c_TextLog = '' c_OutputFile = '' @@ -381,6 +389,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM SET CENTURY ON SET SAFETY OFF SET TABLEPROMPT OFF + SET POINT TO '.' + SET SEPARATOR TO ',' 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") @@ -489,7 +499,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 @@ -682,6 +692,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM IF NOT EMPTY(tcOriginalFileName) tcOriginalFileName = loFSO.GetAbsolutePathName( tcOriginalFileName ) ENDIF + .c_OriginalFileName = EVL( tcOriginalFileName, .c_InputFile ) THIS.writeLog( 'c_InputFile=' + .c_InputFile ) .o_Conversor = NULL @@ -819,6 +830,24 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDPROC + PROCEDURE get_PROGRAM_HEADER + LOCAL lcText + lcText = '' + + *-- Cabecera del PRG e inicio de DEF_CLASS + 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!! + *-------------------------------------------------------------------------------------------------------------------------------------------------------- + <> Version="<>" SourceFile="<>" Generated="<>" <> (Solo para binarios VFP 9 / Only for VFP 9 binaries) + * + ENDTEXT + + RETURN lcText + ENDPROC + + PROCEDURE getNext_BAK *-------------------------------------------------------------------------------------------------------------- * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) @@ -6205,11 +6234,13 @@ 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 + c_MenuLocation = '' ******************************************************************************************************************* PROCEDURE Convertir @@ -6412,7 +6443,6 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base + [] ; + [] ; + [] ; - + [] ; + [] ; + [] @@ -7383,25 +7413,6 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ENDPROC - ******************************************************************************************************************* - PROCEDURE write_PROGRAM_HEADER - LOCAL lcText - lcText = '' - - *-- Cabecera del PRG e inicio de DEF_CLASS - 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!! - *-------------------------------------------------------------------------------------------------------------------------------------------------------- - <> Version="<>" SourceFile="<>" Generated="<>" <> (Solo para binarios VFP 9 / Only for VFP 9 binaries) - * - ENDTEXT - - RETURN lcText - ENDPROC - - ******************************************************************************************************************* PROCEDURE write_PROTECTED_Properties *-- Escribo la definición PROTECTED de propiedades @@ -7917,7 +7928,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 - C_FB2PRG_CODE = C_FB2PRG_CODE + THIS.write_PROGRAM_HEADER() + C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxbin2prg.get_PROGRAM_HEADER() THIS.get_NombresObjetosOLEPublic( @la_NombresObjsOle ) @@ -7999,7 +8010,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg IF THIS.l_Test toModulo = C_FB2PRG_CODE ELSE - lnLen = LEN( THIS.write_PROGRAM_HEADER() ) + lnLen = LEN( toFoxbin2prg.get_PROGRAM_HEADER() ) DO CASE CASE FILE(THIS.c_OutputFile) AND SUBSTR( FILETOSTR( THIS.c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen ) THIS.writeLog( 'El archivo de salida [' + THIS.c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) @@ -8063,7 +8074,7 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg *toModulo = NULL *toModulo = CREATEOBJECT('CL_MODULO') - C_FB2PRG_CODE = C_FB2PRG_CODE + THIS.write_PROGRAM_HEADER() + C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxbin2prg.get_PROGRAM_HEADER() THIS.get_NombresObjetosOLEPublic( @la_NombresObjsOle ) @@ -8164,7 +8175,7 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg IF THIS.l_Test toModulo = C_FB2PRG_CODE ELSE - lnLen = LEN( THIS.write_PROGRAM_HEADER() ) + lnLen = LEN( toFoxbin2prg.get_PROGRAM_HEADER() ) DO CASE CASE FILE(THIS.c_OutputFile) AND SUBSTR( FILETOSTR( THIS.c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen ) THIS.writeLog( 'El archivo de salida [' + THIS.c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) @@ -8280,7 +8291,7 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg ENDSCAN - C_FB2PRG_CODE = C_FB2PRG_CODE + THIS.write_PROGRAM_HEADER() + C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxbin2prg.get_PROGRAM_HEADER() *-- Directorio de inicio @@ -8469,7 +8480,7 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg IF THIS.l_Test toModulo = C_FB2PRG_CODE ELSE - lnLen = LEN( THIS.write_PROGRAM_HEADER() ) + lnLen = LEN( toFoxbin2prg.get_PROGRAM_HEADER() ) DO CASE CASE FILE(THIS.c_OutputFile) AND SUBSTR( FILETOSTR( THIS.c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen ) THIS.writeLog( 'El archivo de salida [' + THIS.c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) @@ -8572,7 +8583,7 @@ DEFINE CLASS c_conversor_frx_a_prg AS c_conversor_bin_a_prg USE IN (SELECT("TABLABIN_0")) - C_FB2PRG_CODE = C_FB2PRG_CODE + THIS.write_PROGRAM_HEADER() + C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxbin2prg.get_PROGRAM_HEADER() *-- Recorro los registros y genero el texto IF VARTYPE(loRegCab) = "O" @@ -8601,7 +8612,7 @@ DEFINE CLASS c_conversor_frx_a_prg AS c_conversor_bin_a_prg IF THIS.l_Test toModulo = C_FB2PRG_CODE ELSE - lnLen = LEN( THIS.write_PROGRAM_HEADER() ) + lnLen = LEN( toFoxbin2prg.get_PROGRAM_HEADER() ) DO CASE CASE FILE(THIS.c_OutputFile) AND SUBSTR( FILETOSTR( THIS.c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen ) THIS.writeLog( 'El archivo de salida [' + THIS.c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) @@ -8659,7 +8670,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 - C_FB2PRG_CODE = C_FB2PRG_CODE + THIS.write_PROGRAM_HEADER() + C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxbin2prg.get_PROGRAM_HEADER() *-- Header loTable = CREATEOBJECT('CL_DBF_TABLE') @@ -8672,7 +8683,7 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg IF THIS.l_Test toModulo = C_FB2PRG_CODE ELSE - lnLen = LEN( THIS.write_PROGRAM_HEADER() ) + lnLen = LEN( toFoxbin2prg.get_PROGRAM_HEADER() ) DO CASE CASE FILE(THIS.c_OutputFile) AND SUBSTR( FILETOSTR( THIS.c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen ) THIS.writeLog( 'El archivo de salida [' + THIS.c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) @@ -8740,7 +8751,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 - C_FB2PRG_CODE = C_FB2PRG_CODE + THIS.write_PROGRAM_HEADER() + C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxbin2prg.get_PROGRAM_HEADER() *-- Header toDatabase = CREATEOBJECT('CL_DBC') @@ -8753,7 +8764,7 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg IF THIS.l_Test toModulo = C_FB2PRG_CODE ELSE - lnLen = LEN( THIS.write_PROGRAM_HEADER() ) + lnLen = LEN( toFoxbin2prg.get_PROGRAM_HEADER() ) DO CASE CASE FILE(THIS.c_OutputFile) AND SUBSTR( FILETOSTR( THIS.c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen ) THIS.writeLog( 'El archivo de salida [' + THIS.c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) @@ -8810,7 +8821,7 @@ DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg USE (THIS.c_InputFile) SHARED NOUPDATE ALIAS TABLABIN *-- Header - C_FB2PRG_CODE = C_FB2PRG_CODE + THIS.write_PROGRAM_HEADER() + C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxbin2prg.get_PROGRAM_HEADER() toMenu = CREATEOBJECT('CL_MENU') toMenu.get_DataFromTablabin() @@ -8823,7 +8834,7 @@ DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg IF THIS.l_Test toMenu = C_FB2PRG_CODE ELSE - lnLen = LEN( THIS.write_PROGRAM_HEADER() ) + lnLen = LEN( toFoxbin2prg.get_PROGRAM_HEADER() ) DO CASE CASE FILE(THIS.c_OutputFile) AND SUBSTR( FILETOSTR( THIS.c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen ) THIS.writeLog( 'El archivo de salida [' + THIS.c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) @@ -14285,7 +14296,7 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE LOCAL loBarPop AS CL_MENU_BARPOP OF 'FOXBIN2PRG.PRG' LOCAL llBloqueEncontrado, loReg, lcComment, lcExpr, lcProcName, lcProcCode, loEx AS EXCEPTION ; , llBloque_SetupCode_Analizado, llBloque_CleanupCode_Analizado, llBloque_MenuCode_Analizado ; - , llBloque_MenuType_Analizado, llBloque_Procedure_Analizado + , llBloque_MenuType_Analizado, llBloque_Procedure_Analizado, llBloque_MenuLocation_Analizado STORE '' TO lcComment llBloqueEncontrado = .T. @@ -14309,6 +14320,23 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE loReg.ObjType = toConversor.n_MenuType llBloque_MenuType_Analizado = .T. + CASE NOT llBloque_MenuLocation_Analizado AND LEFT( tcLine, LEN(C_MENULOCATION_I) ) == C_MENULOCATION_I + toConversor.c_MenuLocation = STREXTRACT( tcLine, C_MENULOCATION_I, C_MENULOCATION_F ) + DO CASE + CASE toConversor.c_MenuLocation == 'REPLACE' + loReg.Location = 0 + CASE toConversor.c_MenuLocation == 'APPEND' + loReg.Location = 1 + OTHERWISE + IF LEFT(toConversor.c_MenuLocation,7) == 'BEFORE' + loReg.Location = 2 + ELSE + loReg.Location = 3 + ENDIF + loReg.NAME = GETWORDNUM(toConversor.c_MenuLocation,2) + ENDCASE + llBloque_MenuLocation_Analizado = .T. + CASE NOT llBloque_SetupCode_Analizado AND THIS.analizarBloque_SetupCode( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) llBloque_SetupCode_Analizado = .T. @@ -14469,32 +14497,33 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE 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 ) ) + FOR I = I + 0 TO tnCodeLines + STORE '' TO lcExpr, lcProcName, lcProcCode + 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 + + 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 + + CASE LEFT( tcLine, 12 ) == 'DEFINE MENU ' + loReg.OBJCODE = 22 + loReg.PROCTYPE = 1 + loReg.MARK = CHR(4) + loReg.SETUPTYPE = 1 + loReg.CLEANTYPE = 1 + loReg.ITEMNUM = STR(0,3) + lcMenuType = ALLTRIM( GETWORDNUM( tcLine, 3 ) ) + loReg.ObjType = IIF( lcMenuType = '_MSYSMENU', 1, 5 ) - 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) @@ -14502,52 +14531,86 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE IF EMPTY(lcProcCode) *-- Comando - .PROCEDURE = lcExpr + loReg.PROCEDURE = lcExpr ELSE *-- Procedure lcProcCode = STRTRAN( lcProcCode, '<>', lcProcName ) - .PROCEDURE = lcProcCode + loReg.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 ) + EXIT - 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 ) + CASE LEFT( tcLine, 13 ) == 'DEFINE POPUP ' + loReg.OBJCODE = 22 + loReg.PROCTYPE = 1 + loReg.MARK = CHR(4) + loReg.SETUPTYPE = 1 + loReg.CLEANTYPE = 1 + loReg.ITEMNUM = STR(0,3) + *loReg.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 + loReg.SCHEME = 0 + lcExpr = ALLTRIM( STREXTRACT( C_FB2PRG_CODE, 'ON SELECTION POPUP ALL ', CR_LF ) ) + THIS.AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, @C_FB2PRG_CODE, -1, .F. ) - 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 = '\>', lcProcName ) + loReg.PROCEDURE = lcProcCode + ENDIF + + loBarPop = CREATEOBJECT('CL_MENU_BARPOP') + loBarPop.c_ParentName = '' + loBarPop.n_ParentCode = THIS.oReg.OBJCODE + loBarPop.n_ParentType = THIS.oReg.ObjType + loBarPop.analizarBloque( @tcLine, @taCodeLines, @I, @tnCodeLines, toConversor ) + THIS.ADD( loBarPop ) + + *-- Creo option + loOption = CREATEOBJECT("CL_MENU_OPTION") + loOption.oReg = toConversor.emptyRecord() + WITH loOption.oReg + .ObjType = 3 + .OBJCODE = 77 + .MARK = CHR(0) + .PROMPT = '\><><> + <><><> ENDTEXT IF NOT EMPTY(loReg.SETUP) @@ -14654,6 +14729,19 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE <> ENDTEXT + DO CASE + CASE loHeader.ObjType = 1 && Menu Bar (Sistema) + lcText = lcText + CR_LF + 'DEFINE MENU _MSYSMENU BAR' + + CASE loHeader.ObjType = 5 && Menu Bar (On top) + lcText = lcText + CR_LF + 'DEFINE MENU _ONTOP BAR' + + CASE loHeader.ObjType = 4 && Shortcut + lcText = lcText + CR_LF + 'DEFINE POPUP ' + THIS.ITEM(1).ITEM(1).ITEM(1).oReg.NAME + ' SHORTCUT RELATIVE FROM MROW(),MCOL()' + + ENDCASE + + *-- Bars and Popups IF THIS.COUNT > 0 FOR EACH loBarPop IN THIS FOXOBJECT @@ -14802,7 +14890,7 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE + ', Name=' + TRANSFORM(loReg.NAME) ; + ', LevelName=' + TRANSFORM(loReg.LevelName) ; + ', ItemNum=' + TRANSFORM(loReg.ITEMNUM) ; - + ', Location=' + TRANSFORM(loReg.LOCATION) ; + + ', Location=' + TRANSFORM(loReg.Location) ; + ', Prompt=' + TRANSFORM(loReg.PROMPT) ; + ', Message=' + TRANSFORM(loReg.MESSAGE) ; + ', KeyName=' + TRANSFORM(loReg.KEYNAME) ; @@ -14875,7 +14963,7 @@ 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, lcExpr, lcProcName, lcProcCode ; + LOCAL llBloqueEncontrado, lcSubName, lcComment, lnLast_I, loReg, lcExpr, lcProcName, lcProcCode, lcMenuType ; , loEx AS EXCEPTION STORE '' TO lcSubName, lcComment, lcExpr, lcProcName, lcProcCode @@ -14883,6 +14971,7 @@ DEFINE CLASS CL_MENU_BARPOP AS CL_MENU_COL_BASE loReg = THIS.oReg loReg.ObjType = 2 loReg.PROCTYPE = 1 + loReg.MARK = CHR(0) loReg.ITEMNUM = STR(0,3) llBloqueEncontrado = .T. @@ -14900,33 +14989,41 @@ DEFINE CLASS CL_MENU_BARPOP AS CL_MENU_COL_BASE CASE LEFT( tcLine, LEN(C_MENUCODE_F) ) == C_MENUCODE_F EXIT - CASE LEFT( tcLine, LEN(C_MENUCODE_I) ) == C_MENUCODE_I + CASE LEFT( tcLine, LEN('ON SELECTION POPUP ' + loReg.NAME) ) == 'ON SELECTION POPUP ' + loReg.NAME + EXIT + + CASE LEFT( tcLine, 12 ) == 'DEFINE MENU ' loReg.OBJCODE = 1 loReg.NAME = '_MSYSMENU' loReg.LevelName = loReg.NAME loReg.SCHEME = IIF( loReg.OBJCODE = 1, 3, 4 ) - IF THIS.n_ParentType = 4 - EXIT - 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) - ENDIF - - CASE LEFT( tcLine, LEN('ON SELECTION POPUP ' + loReg.NAME) ) == 'ON SELECTION POPUP ' + loReg.NAME - EXIT + 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 ) ) - IF RIGHT(loReg.NAME,5) == '_FB2P' && Originalmente era vacío y se la había puesto un nombre temporal. - loReg.NAME = '' + IF THIS.n_ParentCode = 22 + loReg.OBJCODE = 1 + loReg.NAME = '_MSYSMENU' + loReg.LevelName = loReg.NAME + loReg.SCHEME = 3 + + IF THIS.n_ParentType = 4 + EXIT + ENDIF + ELSE + loReg.OBJCODE = 0 + loReg.SCHEME = 4 + loReg.NAME = ALLTRIM( GETWORDNUM( tcLine, 3 ) ) + IF RIGHT(loReg.NAME,5) == '_FB2P' && Originalmente era vacío y se la había puesto un nombre temporal. + loReg.NAME = '' + ENDIF + loReg.LevelName = loReg.NAME + lcExpr = ALLTRIM( STREXTRACT( C_FB2PRG_CODE, 'ON SELECTION POPUP ' + loReg.NAME + ' ', CR_LF ) ) + THIS.AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, @C_FB2PRG_CODE, -1 ) + loReg.PROCEDURE = EVL(lcProcCode, lcExpr) 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) CASE LEFT( tcLine, 11 ) == 'DEFINE PAD ' OR LEFT( tcLine, 11 ) == 'DEFINE BAR ' loOption = CREATEOBJECT("CL_MENU_OPTION") @@ -14993,10 +15090,6 @@ DEFINE CLASS CL_MENU_BARPOP AS CL_MENU_COL_BASE 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 @@ -15099,6 +15192,7 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE THIS.oReg = toConversor.emptyRecord() loReg = THIS.oReg + loReg.MARK = CHR(0) loReg.ITEMNUM = STR(0,3) llBloqueEncontrado = .T. @@ -15216,7 +15310,7 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE loReg.NAME = lcPadName loReg.LevelName = ALLTRIM( STREXTRACT( tcLine, ' OF ', ' PROMPT ' ) ) - IF loReg.LevelName # THIS.c_ParentName + IF UPPER(loReg.LevelName) # UPPER(THIS.c_ParentName) EXIT ENDIF @@ -15244,7 +15338,7 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE , '______,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 + loReg.Location = lnNegContainer + lnNegObject * 2^4 CASE LEFT( tcLine, 4 ) == 'KEY ' lcExpr = ALLTRIM( STREXTRACT( tcLine, 'KEY ', ';', 1, 2 ) ) @@ -15399,7 +15493,7 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE loReg.LevelName = ALLTRIM( STREXTRACT( tcLine, ' OF ', ' PROMPT ' ) ) - IF loReg.LevelName # THIS.c_ParentName + IF UPPER(loReg.LevelName) # UPPER(THIS.c_ParentName) EXIT ENDIF @@ -15427,7 +15521,7 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE , '______,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 + loReg.Location = lnNegContainer + lnNegObject * 2^4 CASE LEFT( tcLine, 4 ) == 'KEY ' lcExpr = ALLTRIM( STREXTRACT( tcLine, 'KEY ', ';', 1, 2 ) ) @@ -15719,9 +15813,9 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE + ' 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