diff --git a/TESTS/DATOS_READONLY/encuestas.dbf b/TESTS/DATOS_READONLY/encuestas.dbf
new file mode 100644
index 0000000..4c4e021
Binary files /dev/null and b/TESTS/DATOS_READONLY/encuestas.dbf differ
diff --git a/TESTS/DATOS_READONLY/fb2p_frm_1.sc2 b/TESTS/DATOS_READONLY/fb2p_frm_1.sc2
index 4c89247..06a360a 100644
--- a/TESTS/DATOS_READONLY/fb2p_frm_1.sc2
+++ b/TESTS/DATOS_READONLY/fb2p_frm_1.sc2
@@ -4,10 +4,10 @@
*--------------------------------------------------------------------------------------------------------------------------------------------------------
*< FOXBIN2PRG: Version="1.19" SourceFile="C:\DESA\foxbin2prg\TESTS\DATOS_READONLY\fb2p_frm_1.scx" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries)
*
-*< OLE: Nombre="Cl_form1.Cl_olecontrol1" Parent="Cl_form1" ObjName="Cl_olecontrol1" OLEObject="C:\Windows\system32\richtx32.ocx" Checksum="1767681336" Value="0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAEAAAAgAAAAEAAAD+////AAAAAAAAAAD////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/////v////7///8EAAAA/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////1IAbwBvAHQAIABFAG4AdAByAHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAUA//////////8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHCT7i+++c4BAwAAAIACAAAAAAAAAwBPAGwAZQBPAGIAagBlAGMAdABEAGEAdABhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAgEDAAAAAgAAAP////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2AAAAAAAAAADAEEAYwBjAGUAcwBzAE8AYgBqAFMAaQB0AGUARABhAHQAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgACAP///////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABPAAAAAAAAAAMAQwBoAGEAbgBnAGUAZABQAHIAbwBwAHMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAIA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAOAAAAAAAAAABAAAAAIAAAD+////BQAAAAYAAAAIAAAABwAAAP7///8JAAAA/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9giHw7j9cbELm1BAIcAJQCIUM0EggAAACKDQAA7QYAACFDNBIBAAYArAAAAAAA//8AAP////8AAAAAAAAAAAAATwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABcAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgcWhqIFp0dVFoYTtqZGZuW2lhZXRyIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAACACwAAAEFwcGVhcmFuY2UACQAAAEkKAAAAAAAAAAwAAABCb3JkZXJTdHlsZQAJAAAASQoAAAABAAAADQAAAAAAAAUAAIAAAAAAAAABAAAAAAABAAIACAAAAHtccnRmMVxhbnNpXGFuc2ljcGcxMjUyXGRlZmYwe1xmb250dABCdWxsZXRJbmRlbnQAEQAAAE4NAAAABwAAAAAAAAAAAAAAEAAAAERpc2FibGVOb1Njcm9sbAAFAAAATAAAAABibHtcZjBcZm5pbFxmY2hhcnNldDAgQXJpYWw7fX0NClx2aWV3a2luZDRcdWMxXHBhcmRcbGFuZzMwODJcZnMxOCBPbGVjb250cm9sMQ0KXHBhciB9DQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAABSaWdodE1hcmdpbgARAAAATg0AAAAHAAAAAAAAAAAAAAAFAAAAVGV4dAAUAAAASAAAAAALAAAAT2xlY29udHJvbDENAAAAQXV0b1ZlcmJNZW51AAUAAABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" />
+*< OLE: Nombre="Cl_form1.Cl_olecontrol1" Parent="Cl_form1" ObjName="Cl_olecontrol1" OLEObject="C:\Windows\system32\richtx32.ocx" Checksum="617849590" Value="0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAEAAAAgAAAAEAAAD+////AAAAAAAAAAD////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/////v////7///8EAAAA/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////1IAbwBvAHQAIABFAG4AdAByAHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAUA//////////8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBjW5n1Hc8BAwAAAIACAAAAAAAAAwBPAGwAZQBPAGIAagBlAGMAdABEAGEAdABhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAgEDAAAAAgAAAP////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2AAAAAAAAAADAEEAYwBjAGUAcwBzAE8AYgBqAFMAaQB0AGUARABhAHQAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgACAP///////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABPAAAAAAAAAAMAQwBoAGEAbgBnAGUAZABQAHIAbwBwAHMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAIA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAOAAAAAAAAAABAAAAAIAAAD+////BQAAAAYAAAAIAAAABwAAAP7///8JAAAA/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9giHw7j9cbELm1BAIcAJQCIUM0EggAAACKDQAA7QYAACFDNBIBAAYArAAAAAAA//8AAP////8AAAAAAAAAAAAATwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABcAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgcWhqIFp0dVFoYTtqZGZuW2lhZXRyIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAACACwAAAEFwcGVhcmFuY2UACQAAAEkKAAAAAAAAAAwAAABCb3JkZXJTdHlsZQAJAAAASQoAAAABAAAADQAAAAAAAAUAAIAAAAAAAAABAAAAAAABAAIACAAAAHtccnRmMVxhbnNpXGFuc2ljcGcxMjUyXGRlZmYwe1xmb250dABCdWxsZXRJbmRlbnQAEQAAAE4NAAAABwAAAAAAAAAAAAAAEAAAAERpc2FibGVOb1Njcm9sbAAFAAAATAAAAABibHtcZjBcZm5pbFxmY2hhcnNldDAgQXJpYWw7fX0NClx2aWV3a2luZDRcdWMxXHBhcmRcbGFuZzMwODJcZnMxOCBPbGVjb250cm9sMQ0KXHBhciB9DQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAABSaWdodE1hcmdpbgARAAAATg0AAAAHAAAAAAAAAAAAAAAFAAAAVGV4dAAUAAAASAAAAAALAAAAT2xlY29udHJvbDENAAAAQXV0b1ZlcmJNZW51AAUAAABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" />
*
DEFINE CLASS Cl_form1 AS cl_form OF "fb2p_test.vcx"
- *< CLASSDATA: Baseclass="form" Timestamp="2013/12/15 18:50:25" Scale="" Uniqueid="_3XW0B1R2O" />
+ *< CLASSDATA: Baseclass="form" Timestamp="2014/01/30 20:58:05" Scale="" Uniqueid="_3XW0B1R2O" />
AllowOutput = .T.
AlwaysOnBottom = .F.
AlwaysOnTop = .F.
@@ -133,7 +133,7 @@ DEFINE CLASS Cl_form1 AS cl_form OF "fb2p_test.vcx"
Name = "Cl_olecontrol1", ;
Top = 256, ;
Width = 131
- *< END OBJECT: ClassLib="fb2p_test.vcx" BaseClass="olecontrol" UniqueID="_3XW0BXGCR" Timestamp="2013/12/03 20:18:24" ZOrder="2900" OLEObject="C:\Windows\system32\richtx32.ocx" CheckSum="1767681336" />
+ *< END OBJECT: ClassLib="fb2p_test.vcx" BaseClass="olecontrol" UniqueID="_3XW0BXGCR" Timestamp="2013/12/03 20:18:24" ZOrder="2900" OLEObject="C:\Windows\system32\richtx32.ocx" CheckSum="617849590" />
ADD OBJECT 'Commandgroup1' AS commandgroup WITH ;
BackColor = 255,128,255, ;
@@ -483,7 +483,7 @@ DEFINE CLASS Cl_form1 AS cl_form OF "fb2p_test.vcx"
ENDDEFINE
DEFINE CLASS Dataenvironment AS dataenvironment
- *< CLASSDATA: Baseclass="dataenvironment" Timestamp="2013/12/15 18:50:25" Scale="" Uniqueid="_3XW0B1R2N" ClassIcon="1" />
+ *< CLASSDATA: Baseclass="dataenvironment" Timestamp="2014/01/30 20:58:05" Scale="" Uniqueid="_3XW0B1R2N" ClassIcon="1" />
AutoCloseTables = .T.
AutoOpenTables = .T.
Comment = ""
@@ -515,6 +515,16 @@ DEFINE CLASS Dataenvironment AS dataenvironment
Tag = "", ;
Top = 20, ;
Width = 102
- *< END OBJECT: BaseClass="cursor" UniqueID="_3XW0B58OZ" Timestamp="2013/12/15 18:50:25" ZOrder="300" />
+ *< END OBJECT: BaseClass="cursor" UniqueID="_3XW0B58OZ" Timestamp="2014/01/30 20:58:05" ZOrder="300" />
+
+ PROCEDURE BeforeOpenTables
+ *-- Comentario en método [Dataenvironment.BeforeOpenTables]
+
+ ENDPROC
+
+ PROCEDURE Cursor1.Init
+ *-- Comentario en método [Dataenvironment.Cursor1.Init]
+
+ ENDPROC
ENDDEFINE
diff --git a/TESTS/DATOS_READONLY/fb2p_frm_1.sct b/TESTS/DATOS_READONLY/fb2p_frm_1.sct
index 4e33748..f915341 100644
Binary files a/TESTS/DATOS_READONLY/fb2p_frm_1.sct and b/TESTS/DATOS_READONLY/fb2p_frm_1.sct differ
diff --git a/TESTS/DATOS_READONLY/fb2p_frm_1.scx b/TESTS/DATOS_READONLY/fb2p_frm_1.scx
index 9872f01..9a9d709 100644
Binary files a/TESTS/DATOS_READONLY/fb2p_frm_1.scx and b/TESTS/DATOS_READONLY/fb2p_frm_1.scx differ
diff --git a/TESTS/DATOS_READONLY/form1.sc2 b/TESTS/DATOS_READONLY/form1.sc2
new file mode 100644
index 0000000..48eceb6
--- /dev/null
+++ b/TESTS/DATOS_READONLY/form1.sc2
@@ -0,0 +1,191 @@
+*--------------------------------------------------------------------------------------------------------------------------------------------------------
+* (ES) AUTOGENERADO - ¡¡ATENCIÓN!! - ¡¡NO PENSADO PARA EJECUTAR!! USAR SOLAMENTE PARA INTEGRAR CAMBIOS Y ALMACENAR CON HERRAMIENTAS SCM!!
+* (EN) AUTOGENERATED - ATTENTION!! - NOT INTENDED FOR EXECUTION!! USE ONLY FOR MERGING CHANGES AND STORING WITH SCM TOOLS!!
+*--------------------------------------------------------------------------------------------------------------------------------------------------------
+*< FOXBIN2PRG: Version="1.19" SourceFile="C:\DESA\TEST\VARIOS\vcx2xml\form1.scx" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries)
+*
+*< OLE: Nombre="frm_Form1.Olecontrol1" Parent="frm_Form1" ObjName="Olecontrol1" OLEObject="C:\Windows\system32\richtx32.ocx" Checksum="238423585" Value="0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAEAAAAgAAAAEAAAD+////AAAAAAAAAAD////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/////v////7////+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////1IAbwBvAHQAIABFAG4AdAByAHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAUA//////////8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOBWdmE47c4BAwAAAAACAAAAAAAAAwBPAGwAZQBPAGIAagBlAGMAdABEAGEAdABhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAgEDAAAAAgAAAP////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2AAAAAAAAAADAEEAYwBjAGUAcwBzAE8AYgBqAFMAaQB0AGUARABhAHQAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgACAP///////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABPAAAAAAAAAAMAQwBoAGEAbgBnAGUAZABQAHIAbwBwAHMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAIA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAEoAAAAAAAAABQAAAAIAAAD+////BAAAAP7///8GAAAABwAAAP7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9giHw7j9cbELm1BAIcAJQCIUM0EggAAAC/DQAAOhAAACFDNBIBAAYArAAAAAAA//8AAP//AQAAAAAAAAAAAAAATwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABcAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgcWhqIFp0dVFoYTtqZGZuW2lhZXRyIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAACADAAAAFJpZ2h0TWFyZ2luABEAAABODQAAAAcAAAAAAAAAAAAAAAUAAABUZXh0ABQAAABIAAAAAAsAAABPbGVjb250cm9sMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAACAAAAAAAAAAQAAAAEAAQACAAgAAAB7XHJ0ZjFcYW5zaVxhbnNpY3BnMTI1MlxkZWZmMHtcZm9udHRibHtcZjBcZm5pbFxmY2hhcnNldDAgQXJpYWw7fX0NClx2aWV3a2luZDRcdWMxXHBhcmRcbGFuZzMwODJcZnMxOCBPbGVjb250cm9sMQ0KXHBhciB9DQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" />
+*
+#INCLUDE "include\keycodes.h"
+
+DEFINE CLASS Dataenvironment AS dataenvironment
+ *< CLASSDATA: Baseclass="dataenvironment" Timestamp="2013/11/19 01:01:01" Scale="" Uniqueid="_3WJ0JJNQE" ClassIcon="1" />
+ DataSource = .NULL.
+ Height = 200
+ Left = 1
+ Name = "Dataenvironment"
+ Top = 220
+ Width = 520
+
+ ADD OBJECT 'Cursor1' AS cursor WITH ;
+ Alias = "foxuser_fdbozzo", ;
+ CursorSource = foxuser_fdbozzo.dbf, ;
+ Height = 90, ;
+ Left = 10, ;
+ Name = "Cursor1", ;
+ Top = 20, ;
+ Width = 90
+ *< END OBJECT: BaseClass="cursor" UniqueID="_3XH1EYNDL" Timestamp="2013/11/29 20:22:23" ZOrder="300" />
+
+ PROCEDURE BeforeOpenTables
+ *-- Dataenvironment.BeforeOpenTables()
+
+ ENDPROC
+
+ PROCEDURE Cursor1.Init
+ *-- Dataenvironment.Cursor1.Init()
+
+ ENDPROC
+
+ENDDEFINE
+
+DEFINE CLASS frm_Form1 AS form
+ *< CLASSDATA: Baseclass="form" Timestamp="2013/11/29 20:22:23" Scale="" Uniqueid="_3WJ0JJNQF" />
+ *
+ *m: *metodo_comun && Método común
+ *
+ Caption = "Form1"
+ DoCreate = .T.
+ Height = 250
+ Icon = container.ico
+ Left = 0
+ Name = "frm_Form1"
+ Top = 0
+ Width = 470
+ WindowType = 1
+
+ ADD OBJECT 'Cnt_controles1' AS cnt_controles WITH ;
+ Left = 28, ;
+ Name = "Cnt_controles1", ;
+ TabIndex = 3, ;
+ Top = 72, ;
+ Check1.Alignment = 0, ;
+ Check1.Name = "Check1", ;
+ Check1.TabIndex = 1, ;
+ Check1.ZOrderSet = 0, ;
+ Check2.Alignment = 0, ;
+ Check2.Name = "Check2", ;
+ Check2.TabIndex = 2, ;
+ Check2.ZOrderSet = 1, ;
+ Check3.Alignment = 0, ;
+ Check3.Name = "Check3", ;
+ Check3.TabIndex = 4, ;
+ Check3.ZOrderSet = 4, ;
+ Check4.Alignment = 0, ;
+ Check4.Name = "Check4", ;
+ Check4.TabIndex = 5, ;
+ Check4.ZOrderSet = 5, ;
+ Label_h.Name = "Label_h", ;
+ Label_h.TabIndex = 6, ;
+ Label_h.ZOrderSet = 2, ;
+ Textbox_h.Name = "Textbox_h", ;
+ Textbox_h.TabIndex = 3, ;
+ Textbox_h.ZOrderSet = 3
+ *< END OBJECT: ClassLib="bca.vcx" BaseClass="container" UniqueID="_3XH0XA3XD" Timestamp="2013/11/19 01:01:01" ZOrder="700" />
+
+ ADD OBJECT 'Cnt_controles1.Label1' AS label WITH ;
+ Caption = "Label1", ;
+ Height = 17, ;
+ Left = 24, ;
+ Name = "Label1", ;
+ TabIndex = 7, ;
+ Top = 84, ;
+ Width = 64
+ *< END OBJECT: BaseClass="label" UniqueID="_3XH1DGY07" Timestamp="2013/11/19 01:01:01" ZOrder="800" />
+
+ ADD OBJECT 'Command1' AS commandbutton WITH ;
+ Caption = "Command1", ;
+ Height = 27, ;
+ Left = 28, ;
+ Name = "Command1", ;
+ TabIndex = 1, ;
+ Top = 20, ;
+ Width = 84
+ *< END OBJECT: BaseClass="commandbutton" UniqueID="_3WJ0JJNQG" Timestamp="2013/11/23 14:11:05" ZOrder="500" />
+
+ ADD OBJECT 'Command2' AS commandbutton WITH ;
+ Caption = "Command1", ;
+ Height = 27, ;
+ Left = 132, ;
+ Name = "Command2", ;
+ TabIndex = 2, ;
+ Top = 20, ;
+ Width = 84
+ *< END OBJECT: BaseClass="commandbutton" UniqueID="_3WJ0JJNQH" Timestamp="2013/11/23 13:58:05" ZOrder="600" />
+
+ ADD OBJECT 'Olecontrol1' AS olecontrol WITH ;
+ Height = 157, ;
+ Left = 328, ;
+ Name = "Olecontrol1", ;
+ Top = 72, ;
+ Width = 133
+ *< END OBJECT: BaseClass="olecontrol" UniqueID="_3XI026DCE" Timestamp="2013/11/19 01:01:01" ZOrder="900" OLEObject="C:\Windows\system32\richtx32.ocx" CheckSum="238423585" />
+
+ PROCEDURE Load
+ *-- Form 1 LOAD()
+
+ ENDPROC
+
+ PROCEDURE metodo_comun && Método común
+ *-- frm_Form1.metodo_comun()
+
+ ENDPROC
+
+ PROCEDURE Unload
+ *-- Form1.Unload()
+
+ ENDPROC
+
+ PROCEDURE Cnt_controles1.Check1.Click
+ *-- Form1.Cnt_controles1.Check1.Click()
+
+ ENDPROC
+
+ PROCEDURE Cnt_controles1.Check2.Click
+ *-- Form1.Cnt_controles1.Check2.Click()
+
+ ENDPROC
+
+ PROCEDURE Cnt_controles1.Check3.Click
+ *-- Form1.Cnt_controles1.Check3.Click()
+
+ ENDPROC
+
+ PROCEDURE Cnt_controles1.Check4.Click
+ *-- Form1.Cnt_controles1.Check4.Click()
+
+ ENDPROC
+
+ PROCEDURE Cnt_controles1.Init
+ *-- Form1.Command1.Cnt_controles1.Init()
+
+ ENDPROC
+
+ PROCEDURE Cnt_controles1.Label1.Click
+ *-- Form1.Cnt_controles1.Label1.Click() ==> No hereda, es nuevo!
+
+ ENDPROC
+
+ PROCEDURE Command1.Click
+ *-- Form1.Command1.Click()
+ PUBLIC ;
+ glEnabled_Opc_A_2_Sub_2 ;
+ , glEnabled_Opc_A_2_Sub_3 ;
+ , glEnabled_Opc_B
+
+ STORE .T. TO ;
+ glEnabled_Opc_A_2_Sub_2 ;
+ , glEnabled_Opc_A_2_Sub_3 ;
+ , glEnabled_Opc_B
+
+ DO MENU1.MPR
+
+ ENDPROC
+
+ PROCEDURE Command2.Click
+ *-- Form1.Command2.Click()
+ QUIT
+
+ ENDPROC
+
+ENDDEFINE
diff --git a/TESTS/DATOS_READONLY/form1.sct b/TESTS/DATOS_READONLY/form1.sct
new file mode 100644
index 0000000..6412140
Binary files /dev/null and b/TESTS/DATOS_READONLY/form1.sct differ
diff --git a/TESTS/DATOS_READONLY/form1.scx b/TESTS/DATOS_READONLY/form1.scx
new file mode 100644
index 0000000..6de218e
Binary files /dev/null and b/TESTS/DATOS_READONLY/form1.scx differ
diff --git a/foxbin2prg.pj2 b/foxbin2prg.pj2
index 8a9caae..e481cdf 100644
--- a/foxbin2prg.pj2
+++ b/foxbin2prg.pj2
@@ -26,7 +26,7 @@ _LegalTrademark = "Open Source"
_ProductName = " FOXBIN2PRG"
_MajorVer = "1"
_MinorVer = "19"
-_Revision = " 210"
+_Revision = " 219"
_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="1144682071" ID="1130644423" ObjRev="544" />
+ .ADD('foxbin2prg.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="1144982028" ID="1130644423" ObjRev="544" />
*
.ITEM('__newproject.f2b').Remove()
diff --git a/foxbin2prg.pjt b/foxbin2prg.pjt
index f205034..674117c 100644
Binary files a/foxbin2prg.pjt and b/foxbin2prg.pjt differ
diff --git a/foxbin2prg.pjx b/foxbin2prg.pjx
index e17e388..9ab4f12 100644
Binary files a/foxbin2prg.pjx and b/foxbin2prg.pjx differ
diff --git a/foxbin2prg.prg b/foxbin2prg.prg
index eea25b7..bd011c6 100644
--- a/foxbin2prg.prg
+++ b/foxbin2prg.prg
@@ -66,6 +66,7 @@
* 08/01/2014 FDBOZZO v1.19.3 Cambio en los timestamps de los TXT para mantener los valores vacíos que generaban muchísimas diferencias
* 22/01/2014 FDBOZZO v1.19.4 Nuevo parámetro Recompile para forzar la recompilación. Ahora por defecto el binario no se recompila para ganar velocidad y evitar errores. Debe recompilar manualmente.
* 22/01/2014 FDBOZZO v1.19.4 DBC: Agregado soporte para comentarios multilínea (propiedad Comment)
+* 30/01/2014 FDBOZZO v1.19.5 Agregada compatibilidad con SourceSafe para Diff y Merge
*
*
*---------------------------------------------------------------------------------------------------
@@ -94,9 +95,9 @@
*---------------------------------------------------------------------------------------------------
* 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
-* tlGenText_na ( ) Por ahora se mantiene por compatibilidad con SCCTEXT.PRG
+* tcType ( ) Por ahora se mantiene por compatibilidad con SCCTEXT.PRG
+* tcTextName ( ) Por ahora se mantiene por compatibilidad con SCCTEXT.PRG
+* tlGenText ( ) Por ahora se mantiene por compatibilidad con SCCTEXT.PRG
* 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
@@ -110,7 +111,7 @@
*
* Ej: DO FOXBIN2PRG.PRG WITH "C:\DESA\INTEGRACION\LIBRERIA.VCX"
*---------------------------------------------------------------------------------------------------
-LPARAMETERS tc_InputFile, tcType_na, tcTextName_na, tlGenText_na, tcDontShowErrors, tcDebug, tcDontShowProgress, tcOriginalFileName, tcRecompile
+LPARAMETERS tc_InputFile, tcType, tcTextName, tlGenText, tcDontShowErrors, tcDebug, tcDontShowProgress, tcOriginalFileName, tcRecompile
*-- Internacionalización / Internationalization
*-- Fin / End
@@ -279,7 +280,7 @@ LPARAMETERS tc_InputFile, tcType_na, tcTextName_na, tlGenText_na, tcDontShowErro
#DEFINE C_FILE_DOESNT_EXIST_LOC 'El archivo no existe:'
#DEFINE C_FILE_NAME_IS_NOT_SUPPORTED_LOC 'El archivo [<<.c_InputFile>>] no está soportado'
#DEFINE C_FILE_NOT_FOUND_LOC 'No se encontró el archivo'
- #DEFINE C_FOXBIN2PRG_CFG_EXTENSION_LOC 'extension:'
+ #DEFINE C_EXTENSION_RECONFIGURATION_LOC 'Reconfiguración de extensión:'
#DEFINE C_FOXBIN2PRG_ERROR_CAPTION_LOC 'FOXBIN2PRG: ERROR!!'
#DEFINE C_FOXBIN2PRG_INFO_SINTAX_LOC 'FOXBIN2PRG: INFORMACIÓN DE SINTAXIS'
#DEFINE C_FOXBIN2PRG_INFO_SINTAX_EXAMPLE_LOC 'FOXBIN2PRG [cType_ND cTextName_ND cGenText_ND cNoMostrarErrores cDebug]' + CR_LF + CR_LF ;
@@ -308,24 +309,38 @@ LPARAMETERS tc_InputFile, tcType_na, tcTextName_na, tlGenText_na, tcDontShowErro
#ENDIF
*******************************************************************************************************************
+LOCAL loCnv AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
+LOCAL lnResp, loEx as Exception
-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 ;
- , '', NULL, NULL, .F., tcOriginalFileName, tcRecompile )
+*SYS(2030,1)
+*SYS(2335,0)
+*IF PCOUNT() > 1 && Saltear las querys de SourceSafe sobre soporte de archivos
+* SET STEP ON
+* MESSAGEBOX( SYS(5)+CURDIR(),64+4096,PROGRAM(),5000)
+*ENDIF
+
+loCnv = CREATEOBJECT("c_foxbin2prg")
+loEx = NULL
+lnResp = loCnv.ejecutar( tc_InputFile, tcType, tcTextName, tlGenText, tcDontShowErrors, tcDebug ;
+ , '', NULL, @loEx, .F., tcOriginalFileName, tcRecompile )
ADDPROPERTY(_SCREEN, 'ExitCode', lnResp)
-IF _VFP.STARTMODE <= 1
- RETURN lnResp
-ENDIF
+*IF _VFP.STARTMODE <= 1
+* RETURN lnResp
+*ENDIF
*-- Muy útil para procesos batch que capturan el código de error
-DECLARE ExitProcess IN Win32API INTEGER ExitCode
-IF NOT EMPTY(lnResp)
+IF _VFP.STARTMODE > 1 AND NOT EMPTY(lnResp) AND VARTYPE(loEx) = "O"
+ DECLARE ExitProcess IN Win32API INTEGER ExitCode
ExitProcess(1)
ENDIF
+loEx = NULL
+loCnv = NULL
+RELEASE loEx, loCnv
+
+SET COVERAGE TO
+RETURN lnResp
QUIT
@@ -352,6 +367,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM
+ [] ;
+ [] ;
+ [] ;
+ + [] ;
+ [] ;
+ [] ;
+ [] ;
@@ -444,6 +460,90 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM
ENDPROC
+ PROCEDURE ChangeFileAttribute
+ * Using Win32 Functions in Visual FoxPro
+ * example=103
+ * Changing file attributes
+ LPARAMETERS tcFilename, tcAttrib
+ tcAttrib = UPPER(tcAttrib)
+
+ #DEFINE FILE_ATTRIBUTE_READONLY 1
+ #DEFINE FILE_ATTRIBUTE_HIDDEN 2
+ #DEFINE FILE_ATTRIBUTE_SYSTEM 4
+ #DEFINE FILE_ATTRIBUTE_DIRECTORY 16
+ #DEFINE FILE_ATTRIBUTE_ARCHIVE 32
+ #DEFINE FILE_ATTRIBUTE_NORMAL 128
+ #DEFINE FILE_ATTRIBUTE_TEMPORARY 512
+ #DEFINE FILE_ATTRIBUTE_COMPRESSED 2048
+
+ DECLARE SHORT SetFileAttributes IN kernel32 STRING tcFileName, INTEGER dwFileAttributes
+ DECLARE INTEGER GetFileAttributes IN kernel32 STRING tcFileName
+
+ * read current attributes for this file
+ dwFileAttributes = GetFileAttributes(tcFilename)
+
+ IF dwFileAttributes = -1
+ * the file does not exist
+ RETURN
+ ENDIF
+
+ IF dwFileAttributes > 0
+ IF '+R' $ tcAttrib
+ dwFileAttributes = BITOR(dwFileAttributes, FILE_ATTRIBUTE_READONLY)
+ ENDIF
+ IF '+A' $ tcAttrib
+ dwFileAttributes = BITOR(dwFileAttributes, FILE_ATTRIBUTE_ARCHIVE)
+ ENDIF
+ IF '+S' $ tcAttrib
+ dwFileAttributes = BITOR(dwFileAttributes, FILE_ATTRIBUTE_SYSTEM)
+ ENDIF
+ IF '+H' $ tcAttrib
+ dwFileAttributes = BITOR(dwFileAttributes, FILE_ATTRIBUTE_HIDDEN)
+ ENDIF
+ IF '+D' $ tcAttrib
+ dwFileAttributes = BITOR(dwFileAttributes, FILE_ATTRIBUTE_DIRECTORY)
+ ENDIF
+ IF '+N' $ tcAttrib
+ dwFileAttributes = BITOR(dwFileAttributes, FILE_ATTRIBUTE_NORMAL)
+ ENDIF
+ IF '+T' $ tcAttrib
+ dwFileAttributes = BITOR(dwFileAttributes, FILE_ATTRIBUTE_TEMPORARY)
+ ENDIF
+ IF '+C' $ tcAttrib
+ dwFileAttributes = BITOR(dwFileAttributes, FILE_ATTRIBUTE_COMPRESSED)
+ ENDIF
+
+ IF '-R' $ tcAttrib AND BITAND(dwFileAttributes, FILE_ATTRIBUTE_READONLY) = FILE_ATTRIBUTE_READONLY
+ dwFileAttributes = dwFileAttributes - FILE_ATTRIBUTE_READONLY
+ ENDIF
+ IF '-A' $ tcAttrib AND BITAND(dwFileAttributes, FILE_ATTRIBUTE_ARCHIVE) = FILE_ATTRIBUTE_ARCHIVE
+ dwFileAttributes = dwFileAttributes - FILE_ATTRIBUTE_ARCHIVE
+ ENDIF
+ IF '-S' $ tcAttrib AND BITAND(dwFileAttributes, FILE_ATTRIBUTE_SYSTEM) = FILE_ATTRIBUTE_SYSTEM
+ dwFileAttributes = dwFileAttributes - FILE_ATTRIBUTE_SYSTEM
+ ENDIF
+ IF '-H' $ tcAttrib AND BITAND(dwFileAttributes, FILE_ATTRIBUTE_HIDDEN) = FILE_ATTRIBUTE_HIDDEN
+ dwFileAttributes = dwFileAttributes - FILE_ATTRIBUTE_HIDDEN
+ ENDIF
+ IF '-D' $ tcAttrib AND BITAND(dwFileAttributes, FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY
+ dwFileAttributes = dwFileAttributes - FILE_ATTRIBUTE_DIRECTORY
+ ENDIF
+ IF '-N' $ tcAttrib AND BITAND(dwFileAttributes, FILE_ATTRIBUTE_NORMAL) = FILE_ATTRIBUTE_NORMAL
+ dwFileAttributes = dwFileAttributes - FILE_ATTRIBUTE_NORMAL
+ ENDIF
+ IF '-T' $ tcAttrib AND BITAND(dwFileAttributes, FILE_ATTRIBUTE_TEMPORARY) = FILE_ATTRIBUTE_TEMPORARY
+ dwFileAttributes = dwFileAttributes - FILE_ATTRIBUTE_TEMPORARY
+ ENDIF
+ IF '-C' $ tcAttrib AND BITAND(dwFileAttributes, FILE_ATTRIBUTE_COMPRESSED) = FILE_ATTRIBUTE_COMPRESSED
+ dwFileAttributes = dwFileAttributes - FILE_ATTRIBUTE_COMPRESSED
+ ENDIF
+
+ * setting selected attributes
+ =SetFileAttributes(tcFilename, dwFileAttributes)
+ ENDIF
+ ENDPROC
+
+
PROCEDURE compileFoxProBinary
LPARAMETERS tcFilename
LOCAL lcType
@@ -565,9 +665,9 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM
*--------------------------------------------------------------------------------------------------------------
* 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
- * tlGenText_na (?v IN ) NO DISPONIBLE. Se mantiene por compatibilidad con SourceSafe
+ * tcType (?v IN ) NO DISPONIBLE. Se mantiene por compatibilidad con SourceSafe
+ * tcTextName (?v IN ) NO DISPONIBLE. Se mantiene por compatibilidad con SourceSafe
+ * tlGenText (?v IN ) NO DISPONIBLE. Se mantiene por compatibilidad con SourceSafe
* tcDontShowErrors (?v IN ) '1' para no mostrar mensajes de error (MESSAGEBOX)
* tcDebug (?v IN ) '1' para habilitar modo debug (SOLO DESARROLLO)
* tcDontShowProgress (?v IN ) '1' para inhabilitar la barra de progreso
@@ -582,23 +682,24 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM
* generar errores de compilación, típicamente los #include.
* NOTA: Si en vez de '1' se indica un Path (p.ej, el del proyecto, se usará como base para recompilar
*--------------------------------------------------------------------------------------------------------------
- LPARAMETERS tc_InputFile, tcType_na, tcTextName_na, tlGenText_na, tcDontShowErrors, tcDebug, tcDontShowProgress ;
+ LPARAMETERS tc_InputFile, tcType, tcTextName, tlGenText, tcDontShowErrors, tcDebug, tcDontShowProgress ;
, toModulo, toEx AS EXCEPTION, tlRelanzarError, tcOriginalFileName, tcRecompile
TRY
LOCAL I, lcPath, lnCodError, lcFileSpec, lcFile, laFiles(1,5), laConfig(1), lcConfigFile, lcExt ;
- , llExisteConfig, lcConfData, lnFileCount ;
+ , llExisteConfig, lcConfData, lnFileCount, lcErrorInfo ;
, loEx AS EXCEPTION ;
, loFSO AS Scripting.FileSystemObject
lnCodError = 0
+ tcRecompile = EVL(tcRecompile,'')
- SET DELETED ON
- SET DATE YMD
- SET HOURS TO 24
- SET CENTURY ON
- SET SAFETY OFF
- SET TABLEPROMPT OFF
+ *SET DELETED ON
+ *SET DATE YMD
+ *SET HOURS TO 24
+ *SET CENTURY ON
+ *SET SAFETY OFF
+ *SET TABLEPROMPT OFF
IF _VFP.STARTMODE > 0
SET ESCAPE OFF
@@ -621,7 +722,8 @@ 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_Recompile = (NOT EMPTY(tcRecompile) AND (TRANSFORM(tcRecompile) == '1' OR DIRECTORY(tcRecompile)))
+ *THIS.l_Recompile = (NOT EMPTY(tcRecompile) AND (TRANSFORM(tcRecompile) == '1' OR DIRECTORY(tcRecompile)))
+ THIS.l_Recompile = (EMPTY(tcRecompile) OR TRANSFORM(tcRecompile) == '1' OR DIRECTORY(tcRecompile))
THIS.l_Debug = (TRANSFORM(tcDebug)=='1' OR FILE(FORCEEXT(THIS.c_Foxbin2prg_FullPath,'LOG')))
IF THIS.l_ShowProgress
@@ -634,11 +736,13 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM
IF llExisteConfig
FOR I = 1 TO ALINES( laConfig, FILETOSTR( lcConfigFile ), 1+4 )
- IF LOWER( LEFT( laConfig(I), 10 ) ) == C_FOXBIN2PRG_CFG_EXTENSION_LOC && 'extension:'
+ IF LOWER( LEFT( laConfig(I), 10 ) ) == 'extension:'
lcConfData = ALLTRIM( SUBSTR( laConfig(I), 11 ) )
lcExt = 'c_' + ALLTRIM( GETWORDNUM( lcConfData, 1, '=' ) )
IF PEMSTATUS( THIS, lcExt, 5 )
THIS.ADDPROPERTY( lcExt, UPPER( ALLTRIM( GETWORDNUM( lcConfData, 2, '=' ) ) ) )
+ *THIS.writeLog( 'Reconfiguración de extensión:' + ' ' + lcExt + ' a ' + UPPER( ALLTRIM( GETWORDNUM( lcConfData, 2, '=' ) ) ) )
+ THIS.writeLog( C_EXTENSION_RECONFIGURATION_LOC + ' ' + lcExt + ' a ' + UPPER( ALLTRIM( GETWORDNUM( lcConfData, 2, '=' ) ) ) )
ENDIF
ENDIF
ENDFOR
@@ -662,7 +766,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM
IF THIS.l_Recompile AND LEN(tcRecompile) > 3 AND DIRECTORY(tcRecompile)
CD (tcRecompile)
ELSE
- CD (JUSTPATH(lcFileSpec))
+ *CD (JUSTPATH(lcFileSpec))
ENDIF
THIS.c_LogFile = ADDBS( JUSTPATH( lcFileSpec ) ) + STRTRAN( JUSTFNAME( lcFileSpec ), '*', '_ALL' ) + '.LOG'
@@ -698,25 +802,54 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM
ENDFOR
OTHERWISE
- *-- UN ARCHIVO INDIVIDUAL
- IF FILE(tc_InputFile)
+ *-- UN ARCHIVO INDIVIDUAL O CONSULTA DE SOPORTE DE ARCHIVO
+ IF LEN(NVL(tc_InputFile,'')) = 1
+ *-- Consulta de soporte de conversión (compatibilidad con SourceSafe)
+ DO CASE
+ CASE tc_InputFile $ 'dD' && DBC, DBF
+ lnCodError = 1
+ CASE tc_InputFile $ 'KBMRV' && SCX, LBX, MNX, FRX, VCX
+ lnCodError = 2
+ OTHERWISE
+ lnCodError = -1
+ ENDCASE
+
+ ELSE
- IF THIS.l_Recompile AND LEN(tcRecompile) > 3 AND DIRECTORY(tcRecompile)
- CD (tcRecompile)
- ELSE
- CD (JUSTPATH(tc_InputFile))
- ENDIF
+ IF FILE(tc_InputFile)
+ ERASE ( tc_InputFile + '.ERR' )
- THIS.c_LogFile = tc_InputFile + '.LOG'
-
- IF THIS.l_Debug
- IF FILE( THIS.c_LogFile )
- ERASE ( THIS.c_LogFile )
+ IF THIS.l_Recompile AND LEN(tcRecompile) > 3 AND DIRECTORY(tcRecompile)
+ CD (tcRecompile)
+ ELSE
+ *CD (JUSTPATH(tc_InputFile))
ENDIF
- THIS.writeLog( THIS.c_Foxbin2prg_FullPath + ' - FileSpec: ' + EVL(tc_InputFile,'') )
- ENDIF
- lnCodError = THIS.Convertir( tc_InputFile, toModulo, toEx, tlRelanzarError, tcOriginalFileName )
+ THIS.c_LogFile = tc_InputFile + '.LOG'
+
+ IF EVL(tcType,'0') <> '0' AND EVL(tcTextName,'0') <> '0'
+ *-- Compatibilidad con SourceSafe
+
+ IF NOT tlGenText
+ *-- COMPATIBILIDAD CON SOURCESAFE. 30/01/2014
+ *-- Create BINARIO desde versión TEXTO
+ *-- Como el archivo de entrada siempre es el binario cuando se usa SCCAPI,
+ *-- para se debe regenerar el binario (tlGenText=.F.) se debe usar como
+ *-- archivo de entrada tcTextName en su lugar. Aquí los intercambio.
+ tc_InputFile = tcTextName
+ THIS.l_Recompile = .T.
+ ENDIF
+ ENDIF
+
+ IF THIS.l_Debug
+ IF FILE( THIS.c_LogFile )
+ ERASE ( THIS.c_LogFile )
+ ENDIF
+ THIS.writeLog( THIS.c_Foxbin2prg_FullPath + ' - FileSpec: ' + EVL(tc_InputFile,'') )
+ ENDIF
+
+ lnCodError = THIS.Convertir( tc_InputFile, toModulo, toEx, .T., tcOriginalFileName )
+ ENDIF
ENDIF
ENDCASE
@@ -724,11 +857,22 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM
CATCH TO toEx
lnCodError = toEx.ErrorNo
+ lcErrorInfo = THIS.Exception2Str(toEx) + CR_LF + CR_LF + C_SOURCEFILE_LOC + THIS.c_InputFile
ADDPROPERTY(_SCREEN, 'ExitCode', toEx.ERRORNO)
- IF llExisteConfig
- THIS.writeLog( 'ERROR: ' + TRANSFORM(toEx.ERRORNO) + ', ' + toEx.MESSAGE + CR_LF ;
- + toEx.PROCEDURE + ', line ' + TRANSFORM(toEx.LINENO) + CR_LF ;
- + toEx.DETAILS )
+
+ TRY
+ STRTOFILE( lcErrorInfo, EVL(tc_InputFile,'foxbin2prg') + '.ERR' )
+ CATCH TO loEx2
+ ENDTRY
+
+ IF THIS.l_Debug
+ IF _VFP.STARTMODE = 0
+ SET STEP ON
+ ENDIF
+ THIS.writeLog( lcErrorInfo )
+ ENDIF
+ IF THIS.l_Debug AND THIS.l_ShowErrors
+ MESSAGEBOX( lcErrorInfo, 0+16+4096, C_FOXBIN2PRG_ERROR_CAPTION_LOC, 60000 )
ENDIF
IF tlRelanzarError
THROW
@@ -793,83 +937,103 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM
ERROR C_FILE_DOESNT_EXIST_LOC + ' [' + .c_InputFile + ']'
ENDIF
- IF FILE( .c_InputFile + '.ERR' )
- TRY
- ERASE ( .c_InputFile + '.ERR' )
- CATCH
- ENDTRY
- ENDIF
-
lcExtension = UPPER( JUSTEXT(.c_InputFile) )
DO CASE
CASE lcExtension = 'VCX'
.c_OutputFile = FORCEEXT( .c_InputFile, .c_VC2 )
.o_Conversor = CREATEOBJECT( 'c_conversor_vcx_a_prg' )
+ .ChangeFileAttribute( FORCEEXT( .c_InputFile, .c_VC2 ), '+N' )
CASE lcExtension = 'SCX'
.c_OutputFile = FORCEEXT( .c_InputFile, .c_SC2 )
.o_Conversor = CREATEOBJECT( 'c_conversor_scx_a_prg' )
+ .ChangeFileAttribute( FORCEEXT( .c_InputFile, .c_SC2 ), '+N' )
CASE lcExtension = 'PJX'
.c_OutputFile = FORCEEXT( .c_InputFile, .c_PJ2 )
.o_Conversor = CREATEOBJECT( 'c_conversor_pjx_a_prg' )
+ .ChangeFileAttribute( FORCEEXT( .c_InputFile, .c_PJ2 ), '+N' )
CASE lcExtension = 'PJM'
.c_OutputFile = FORCEEXT( .c_InputFile, .c_PJ2 )
.o_Conversor = CREATEOBJECT( 'c_conversor_pjm_a_prg' )
+ .ChangeFileAttribute( FORCEEXT( .c_InputFile, .c_PJ2 ), '+N' )
CASE lcExtension = 'FRX'
.c_OutputFile = FORCEEXT( .c_InputFile, .c_FR2 )
.o_Conversor = CREATEOBJECT( 'c_conversor_frx_a_prg' )
+ .ChangeFileAttribute( FORCEEXT( .c_InputFile, .c_FR2 ), '+N' )
CASE lcExtension = 'LBX'
.c_OutputFile = FORCEEXT( .c_InputFile, .c_LB2 )
.o_Conversor = CREATEOBJECT( 'c_conversor_frx_a_prg' )
+ .ChangeFileAttribute( FORCEEXT( .c_InputFile, .c_LB2 ), '+N' )
CASE lcExtension = 'DBF'
.c_OutputFile = FORCEEXT( .c_InputFile, .c_DB2 )
.o_Conversor = CREATEOBJECT( 'c_conversor_dbf_a_prg' )
+ .ChangeFileAttribute( FORCEEXT( .c_InputFile, .c_DB2 ), '+N' )
CASE lcExtension = 'DBC'
.c_OutputFile = FORCEEXT( .c_InputFile, .c_DC2 )
.o_Conversor = CREATEOBJECT( 'c_conversor_dbc_a_prg' )
+ .ChangeFileAttribute( FORCEEXT( .c_InputFile, .c_DC2 ), '+N' )
CASE lcExtension = 'MNX'
.c_OutputFile = FORCEEXT( .c_InputFile, .c_MN2 )
.o_Conversor = CREATEOBJECT( 'c_conversor_mnx_a_prg' )
+ .ChangeFileAttribute( FORCEEXT( .c_InputFile, .c_MN2 ), '+N' )
CASE lcExtension = .c_VC2
.c_OutputFile = FORCEEXT( .c_InputFile, 'VCX' )
.o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_vcx' )
+ .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'VCX' ), '+N' )
+ .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'VCT' ), '+N' )
CASE lcExtension = .c_SC2
.c_OutputFile = FORCEEXT( .c_InputFile, 'SCX' )
.o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_scx' )
+ .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'SCX' ), '+N' )
+ .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'SCT' ), '+N' )
CASE lcExtension = .c_PJ2
.c_OutputFile = FORCEEXT( .c_InputFile, 'PJX' )
.o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_pjx' )
+ .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'PJX' ), '+N' )
+ .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'PJT' ), '+N' )
CASE lcExtension = .c_FR2
.c_OutputFile = FORCEEXT( .c_InputFile, 'FRX' )
.o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_frx' )
+ .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'FRX' ), '+N' )
+ .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'FRT' ), '+N' )
CASE lcExtension = .c_LB2
.c_OutputFile = FORCEEXT( .c_InputFile, 'LBX' )
.o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_frx' )
+ .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'LBX' ), '+N' )
+ .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'LBT' ), '+N' )
CASE lcExtension = .c_DB2
.c_OutputFile = FORCEEXT( .c_InputFile, 'DBF' )
.o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_dbf' )
+ .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'DBF' ), '+N' )
+ .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'FPT' ), '+N' )
+ .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'CDX' ), '+N' )
CASE lcExtension = .c_DC2
.c_OutputFile = FORCEEXT( .c_InputFile, 'DBC' )
.o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_dbc' )
+ .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'DBC' ), '+N' )
+ .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'DCX' ), '+N' )
+ .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'DCT' ), '+N' )
CASE lcExtension = .c_MN2
.c_OutputFile = FORCEEXT( .c_InputFile, 'MNX' )
.o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_mnx' )
+ .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'MNX' ), '+N' )
+ .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'MNT' ), '+N' )
OTHERWISE
*ERROR 'El archivo [' + .c_InputFile + '] no está soportado'
@@ -899,20 +1063,15 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM
lnCodError = toEx.ERRORNO
lcErrorInfo = THIS.Exception2Str(toEx) + CR_LF + CR_LF + C_SOURCEFILE_LOC + THIS.c_InputFile
- TRY
- STRTOFILE( lcErrorInfo, THIS.c_InputFile + '.ERR' )
- CATCH TO loEx2
- ENDTRY
-
IF THIS.l_Debug
IF _VFP.STARTMODE = 0
SET STEP ON
ENDIF
- THIS.writeLog( lcErrorInfo )
- ENDIF
- IF THIS.l_Debug AND THIS.l_ShowErrors
- MESSAGEBOX( lcErrorInfo, 0+16+4096, C_FOXBIN2PRG_ERROR_CAPTION_LOC, 60000 )
+ *THIS.writeLog( lcErrorInfo )
ENDIF
+ *IF THIS.l_Debug AND THIS.l_ShowErrors
+ * MESSAGEBOX( lcErrorInfo, 0+16+4096, C_FOXBIN2PRG_ERROR_CAPTION_LOC, 60000 )
+ *ENDIF
IF tlRelanzarError && Usado en Unit Testing
THROW
ENDIF
@@ -1041,6 +1200,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM
LOCAL lcLog, laFile(1,5)
*THIS.writeLog( '- Se ha solicitado capitalizar el archivo [' + tcFileName + ']' )
THIS.writeLog( TEXTMERGE(C_REQUESTING_CAPITALIZATION_OF_FILE_LOC) )
+ THIS.ChangeFileAttribute( tcFileName, '+N' )
lcLog = ''
DO (tcEXE_CAPS) WITH tcFileName, '', 'F', lcLog, .T.
THIS.writeLog( lcLog )
@@ -4247,111 +4407,119 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin
*-- Recorro las CLASES
- FOR I = 1 TO toModulo._Clases_Count
+ FOR X = 1 TO 2
+ FOR I = 1 TO toModulo._Clases_Count
- loClase = toModulo._Clases(I)
+ loClase = toModulo._Clases(I)
- *-- Inserto la clase
- INSERT INTO TABLABIN ;
- ( PLATFORM ;
- , UNIQUEID ;
- , TIMESTAMP ;
- , CLASS ;
- , CLASSLOC ;
- , BASECLASS ;
- , OBJNAME ;
- , PARENT ;
- , PROPERTIES ;
- , PROTECTED ;
- , METHODS ;
- , OLE ;
- , OLE2 ;
- , RESERVED1 ;
- , RESERVED2 ;
- , RESERVED3 ;
- , RESERVED4 ;
- , RESERVED5 ;
- , RESERVED6 ;
- , RESERVED7 ;
- , RESERVED8 ;
- , USER) ;
- VALUES ;
- ( 'WINDOWS' ;
- , loClase._UniqueID ;
- , loClase._TimeStamp ;
- , loClase._Class ;
- , loClase._ClassLoc ;
- , loClase._BaseClass ;
- , loClase._ObjName ;
- , loClase._Parent ;
- , loClase._PROPERTIES ;
- , loClase._PROTECTED ;
- , loClase._METHODS ;
- , loClase._Ole ;
- , loClase._Ole2 ;
- , loClase._RESERVED1 ;
- , loClase._RESERVED2 ;
- , loClase._RESERVED3 ;
- , loClase._ClassIcon ;
- , loClase._ProjectClassIcon ;
- , loClase._Scale ;
- , loClase._Comentario ;
- , loClase._includeFile ;
- , loClase._User )
+ *-- El dataenvironment debe estar primero, luego lo demás.
+ IF X = 1 AND NOT loClase._baseclass == 'dataenvironment' ;
+ OR X = 2 AND loClase._baseclass == 'dataenvironment'
+ LOOP
+ ENDIF
+
+ *-- Inserto la clase
+ INSERT INTO TABLABIN ;
+ ( PLATFORM ;
+ , UNIQUEID ;
+ , TIMESTAMP ;
+ , CLASS ;
+ , CLASSLOC ;
+ , BASECLASS ;
+ , OBJNAME ;
+ , PARENT ;
+ , PROPERTIES ;
+ , PROTECTED ;
+ , METHODS ;
+ , OLE ;
+ , OLE2 ;
+ , RESERVED1 ;
+ , RESERVED2 ;
+ , RESERVED3 ;
+ , RESERVED4 ;
+ , RESERVED5 ;
+ , RESERVED6 ;
+ , RESERVED7 ;
+ , RESERVED8 ;
+ , USER) ;
+ VALUES ;
+ ( 'WINDOWS' ;
+ , loClase._UniqueID ;
+ , loClase._TimeStamp ;
+ , loClase._Class ;
+ , loClase._ClassLoc ;
+ , loClase._BaseClass ;
+ , loClase._ObjName ;
+ , loClase._Parent ;
+ , loClase._PROPERTIES ;
+ , loClase._PROTECTED ;
+ , loClase._METHODS ;
+ , loClase._Ole ;
+ , loClase._Ole2 ;
+ , loClase._RESERVED1 ;
+ , loClase._RESERVED2 ;
+ , loClase._RESERVED3 ;
+ , loClase._ClassIcon ;
+ , loClase._ProjectClassIcon ;
+ , loClase._Scale ;
+ , loClase._Comentario ;
+ , loClase._includeFile ;
+ , loClase._User )
- THIS.insert_AllObjects( @loClase )
+ THIS.insert_AllObjects( @loClase )
- *-- Inserto el COMMENT
- INSERT INTO TABLABIN ;
- ( PLATFORM ;
- , UNIQUEID ;
- , TIMESTAMP ;
- , CLASS ;
- , CLASSLOC ;
- , BASECLASS ;
- , OBJNAME ;
- , PARENT ;
- , PROPERTIES ;
- , PROTECTED ;
- , METHODS ;
- , OLE ;
- , OLE2 ;
- , RESERVED1 ;
- , RESERVED2 ;
- , RESERVED3 ;
- , RESERVED4 ;
- , RESERVED5 ;
- , RESERVED6 ;
- , RESERVED7 ;
- , RESERVED8 ;
- , USER) ;
- VALUES ;
- ( 'COMMENT' ;
- , 'RESERVED' ;
- , loClase._TimeStamp ;
- , '' ;
- , '' ;
- , '' ;
- , loClase._ObjName ;
- , '' ;
- , '' ;
- , '' ;
- , '' ;
- , '' ;
- , '' ;
- , '' ;
- , IIF(loClase._OlePublic, 'OLEPublic', '') ;
- , '' ;
- , '' ;
- , '' ;
- , '' ;
- , '' ;
- , '' ;
- , '' )
+ *-- Inserto el COMMENT
+ INSERT INTO TABLABIN ;
+ ( PLATFORM ;
+ , UNIQUEID ;
+ , TIMESTAMP ;
+ , CLASS ;
+ , CLASSLOC ;
+ , BASECLASS ;
+ , OBJNAME ;
+ , PARENT ;
+ , PROPERTIES ;
+ , PROTECTED ;
+ , METHODS ;
+ , OLE ;
+ , OLE2 ;
+ , RESERVED1 ;
+ , RESERVED2 ;
+ , RESERVED3 ;
+ , RESERVED4 ;
+ , RESERVED5 ;
+ , RESERVED6 ;
+ , RESERVED7 ;
+ , RESERVED8 ;
+ , USER) ;
+ VALUES ;
+ ( 'COMMENT' ;
+ , 'RESERVED' ;
+ , loClase._TimeStamp ;
+ , '' ;
+ , '' ;
+ , '' ;
+ , loClase._ObjName ;
+ , '' ;
+ , '' ;
+ , '' ;
+ , '' ;
+ , '' ;
+ , '' ;
+ , '' ;
+ , IIF(loClase._OlePublic, 'OLEPublic', '') ;
+ , '' ;
+ , '' ;
+ , '' ;
+ , '' ;
+ , '' ;
+ , '' ;
+ , '' )
- ENDFOR && I = 1 TO toModulo._Clases_Count
+ ENDFOR && I = 1 TO toModulo._Clases_Count
+ ENDFOR && X = 1 TO 2
USE IN (SELECT("TABLABIN"))
@@ -4516,7 +4684,7 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin
#ENDIF
TRY
- LOCAL lcObjName, lnCodError, loEx AS EXCEPTION ;
+ LOCAL lcObjName, lnCodError, I, X, loEx AS EXCEPTION ;
, loClase AS CL_CLASE OF 'FOXBIN2PRG.PRG' ;
, loObjeto AS CL_OBJETO OF 'FOXBIN2PRG.PRG'
@@ -4530,62 +4698,70 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin
*-- Recorro las CLASES
- FOR I = 1 TO toModulo._Clases_Count
+ FOR X = 1 TO 2
+ FOR I = 1 TO toModulo._Clases_Count
- loClase = toModulo._Clases(I)
+ loClase = toModulo._Clases(I)
+
+ *-- El dataenvironment debe estar primero, luego lo demás.
+ IF X = 1 AND NOT loClase._baseclass == 'dataenvironment' ;
+ OR X = 2 AND loClase._baseclass == 'dataenvironment'
+ LOOP
+ ENDIF
- *-- Inserto la clase
- INSERT INTO TABLABIN ;
- ( PLATFORM ;
- , UNIQUEID ;
- , TIMESTAMP ;
- , CLASS ;
- , CLASSLOC ;
- , BASECLASS ;
- , OBJNAME ;
- , PARENT ;
- , PROPERTIES ;
- , PROTECTED ;
- , METHODS ;
- , OLE ;
- , OLE2 ;
- , RESERVED1 ;
- , RESERVED2 ;
- , RESERVED3 ;
- , RESERVED4 ;
- , RESERVED5 ;
- , RESERVED6 ;
- , RESERVED7 ;
- , RESERVED8 ;
- , USER) ;
- VALUES ;
- ( 'WINDOWS' ;
- , loClase._UniqueID ;
- , loClase._TimeStamp ;
- , loClase._Class ;
- , loClase._ClassLoc ;
- , loClase._BaseClass ;
- , loClase._ObjName ;
- , loClase._Parent ;
- , loClase._PROPERTIES ;
- , loClase._PROTECTED ;
- , loClase._METHODS ;
- , loClase._Ole ;
- , loClase._Ole2 ;
- , loClase._RESERVED1 ;
- , loClase._RESERVED2 ;
- , loClase._RESERVED3 ;
- , loClase._ClassIcon ;
- , loClase._ProjectClassIcon ;
- , loClase._Scale ;
- , loClase._Comentario ;
- , loClase._includeFile ;
- , loClase._User )
+ *-- Inserto la clase
+ INSERT INTO TABLABIN ;
+ ( PLATFORM ;
+ , UNIQUEID ;
+ , TIMESTAMP ;
+ , CLASS ;
+ , CLASSLOC ;
+ , BASECLASS ;
+ , OBJNAME ;
+ , PARENT ;
+ , PROPERTIES ;
+ , PROTECTED ;
+ , METHODS ;
+ , OLE ;
+ , OLE2 ;
+ , RESERVED1 ;
+ , RESERVED2 ;
+ , RESERVED3 ;
+ , RESERVED4 ;
+ , RESERVED5 ;
+ , RESERVED6 ;
+ , RESERVED7 ;
+ , RESERVED8 ;
+ , USER) ;
+ VALUES ;
+ ( 'WINDOWS' ;
+ , loClase._UniqueID ;
+ , loClase._TimeStamp ;
+ , loClase._Class ;
+ , loClase._ClassLoc ;
+ , loClase._BaseClass ;
+ , loClase._ObjName ;
+ , loClase._Parent ;
+ , loClase._PROPERTIES ;
+ , loClase._PROTECTED ;
+ , loClase._METHODS ;
+ , loClase._Ole ;
+ , loClase._Ole2 ;
+ , loClase._RESERVED1 ;
+ , loClase._RESERVED2 ;
+ , loClase._RESERVED3 ;
+ , loClase._ClassIcon ;
+ , loClase._ProjectClassIcon ;
+ , loClase._Scale ;
+ , loClase._Comentario ;
+ , loClase._includeFile ;
+ , loClase._User )
- THIS.insert_AllObjects( @loClase )
+ THIS.insert_AllObjects( @loClase )
- ENDFOR && I = 1 TO toModulo._Clases_Count
+ ENDFOR && I = 1 TO toModulo._Clases_Count
+ ENDFOR && X = 1 TO 2
*-- Inserto el COMMENT final
INSERT INTO TABLABIN ;
@@ -8010,7 +8186,9 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg
CASE FILE(THIS.c_OutputFile) AND SUBSTR( FILETOSTR( THIS.c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen )
*THIS.writeLog( 'El archivo de salida [' + THIS.c_OutputFile + '] no se sobreescribe por ser igual al generado.' )
THIS.writeLog( TEXTMERGE(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) )
- CASE toFoxbin2prg.doBackup( .F., .T., '', '', '' ) AND STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0
+ CASE toFoxbin2prg.doBackup( .F., .T., '', '', '' ) ;
+ AND toFoxBin2prg.ChangeFileAttribute( THIS.c_OutputFile, '-R' ) ;
+ AND STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0
*ERROR 'No se puede generar el archivo [' + THIS.c_OutputFile + '] porque es ReadOnly'
ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC))
ENDCASE
@@ -8177,7 +8355,9 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg
CASE FILE(THIS.c_OutputFile) AND SUBSTR( FILETOSTR( THIS.c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen )
*THIS.writeLog( 'El archivo de salida [' + THIS.c_OutputFile + '] no se sobreescribe por ser igual al generado.' )
THIS.writeLog( TEXTMERGE(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) )
- CASE toFoxbin2prg.doBackup( .F., .T., '', '', '' ) AND STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0
+ CASE toFoxbin2prg.doBackup( .F., .T., '', '', '' ) ;
+ AND toFoxBin2prg.ChangeFileAttribute( THIS.c_OutputFile, '-R' ) ;
+ AND STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0
*ERROR 'No se puede generar el archivo [' + THIS.c_OutputFile + '] porque es ReadOnly'
ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC))
ENDCASE
@@ -8486,7 +8666,9 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg
CASE FILE(THIS.c_OutputFile) AND SUBSTR( FILETOSTR( THIS.c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen )
*THIS.writeLog( 'El archivo de salida [' + THIS.c_OutputFile + '] no se sobreescribe por ser igual al generado.' )
THIS.writeLog( TEXTMERGE(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) )
- CASE toFoxbin2prg.doBackup( .F., .T., '', '', '' ) AND STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0
+ CASE toFoxbin2prg.doBackup( .F., .T., '', '', '' ) ;
+ AND toFoxBin2prg.ChangeFileAttribute( THIS.c_OutputFile, '-R' ) ;
+ AND STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0
*ERROR 'No se puede generar el archivo [' + THIS.c_OutputFile + '] porque es ReadOnly'
ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC))
ENDCASE
@@ -8856,7 +9038,9 @@ DEFINE CLASS c_conversor_pjm_a_prg AS c_conversor_bin_a_prg
CASE FILE(THIS.c_OutputFile) AND SUBSTR( FILETOSTR( THIS.c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen )
*THIS.writeLog( 'El archivo de salida [' + THIS.c_OutputFile + '] no se sobreescribe por ser igual al generado.' )
THIS.writeLog( TEXTMERGE(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) )
- CASE toFoxbin2prg.doBackup( .F., .T., '', '', '' ) AND STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0
+ CASE toFoxbin2prg.doBackup( .F., .T., '', '', '' ) ;
+ AND toFoxBin2prg.ChangeFileAttribute( THIS.c_OutputFile, '-R' ) ;
+ AND STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0
*ERROR 'No se puede generar el archivo [' + THIS.c_OutputFile + '] porque es ReadOnly'
ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC))
ENDCASE
@@ -8991,7 +9175,9 @@ DEFINE CLASS c_conversor_frx_a_prg AS c_conversor_bin_a_prg
CASE FILE(THIS.c_OutputFile) AND SUBSTR( FILETOSTR( THIS.c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen )
*THIS.writeLog( 'El archivo de salida [' + THIS.c_OutputFile + '] no se sobreescribe por ser igual al generado.' )
THIS.writeLog( TEXTMERGE(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) )
- CASE toFoxbin2prg.doBackup( .F., .T., '', '', '' ) AND STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0
+ CASE toFoxbin2prg.doBackup( .F., .T., '', '', '' ) ;
+ AND toFoxBin2prg.ChangeFileAttribute( THIS.c_OutputFile, '-R' ) ;
+ AND STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0
*ERROR 'No se puede generar el archivo [' + THIS.c_OutputFile + '] porque es ReadOnly'
ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC))
ENDCASE
@@ -9067,7 +9253,9 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg
CASE FILE(THIS.c_OutputFile) AND SUBSTR( FILETOSTR( THIS.c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen )
*THIS.writeLog( 'El archivo de salida [' + THIS.c_OutputFile + '] no se sobreescribe por ser igual al generado.' )
THIS.writeLog( TEXTMERGE(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) )
- CASE toFoxbin2prg.doBackup( .F., .T., '', '', '' ) AND STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0
+ CASE toFoxbin2prg.doBackup( .F., .T., '', '', '' ) ;
+ AND toFoxBin2prg.ChangeFileAttribute( THIS.c_OutputFile, '-R' ) ;
+ AND STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0
*ERROR 'No se puede generar el archivo [' + THIS.c_OutputFile + '] porque es ReadOnly'
ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC))
ENDCASE
@@ -9167,7 +9355,9 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg
CASE FILE(THIS.c_OutputFile) AND SUBSTR( FILETOSTR( THIS.c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen )
*THIS.writeLog( 'El archivo de salida [' + THIS.c_OutputFile + '] no se sobreescribe por ser igual al generado.' )
THIS.writeLog( TEXTMERGE(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) )
- CASE toFoxbin2prg.doBackup( .F., .T., '', '', '' ) AND STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0
+ CASE toFoxbin2prg.doBackup( .F., .T., '', '', '' ) ;
+ AND toFoxBin2prg.ChangeFileAttribute( THIS.c_OutputFile, '-R' ) ;
+ AND STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0
*ERROR 'No se puede generar el archivo [' + THIS.c_OutputFile + '] porque es ReadOnly'
ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC))
ENDCASE
@@ -9245,7 +9435,9 @@ DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg
CASE FILE(THIS.c_OutputFile) AND SUBSTR( FILETOSTR( THIS.c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen )
*THIS.writeLog( 'El archivo de salida [' + THIS.c_OutputFile + '] no se sobreescribe por ser igual al generado.' )
THIS.writeLog( TEXTMERGE(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) )
- CASE toFoxbin2prg.doBackup( .F., .T., '', '', '' ) AND STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0
+ CASE toFoxbin2prg.doBackup( .F., .T., '', '', '' ) ;
+ AND toFoxBin2prg.ChangeFileAttribute( THIS.c_OutputFile, '-R' ) ;
+ AND STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0
*ERROR 'No se puede generar el archivo [' + THIS.c_OutputFile + '] porque es ReadOnly'
ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC))
ENDCASE
diff --git a/foxbin2prg_en.h b/foxbin2prg_en.h
new file mode 100644
index 0000000..a942b68
--- /dev/null
+++ b/foxbin2prg_en.h
@@ -0,0 +1,45 @@
+*-------------------------------------------------------------------------------------------------------------------------------------------
+*-- ENGLISH TRANSLATION => RENAME OR COPY TO [foxbin2prg.h] TO USE, AND RECOMPILE FOXBIN2PRG.PRG - Feel free to change or adapt the strings.
+*-------------------------------------------------------------------------------------------------------------------------------------------
+#DEFINE C_ASTERISK_EXT_NOT_ALLOWED_LOC '* and ? extensions are not allowed because is dangerous (binaries can be overwriten with xx2 empty files)'
+#DEFINE C_BACKLINK_CANT_UPDATE_BL_LOC 'Could not update backlink'
+#DEFINE C_BACKLINK_OF_TABLE_LOC 'of table'
+#DEFINE C_BACKUP_OF_LOC 'Backup of: '
+#DEFINE C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC 'Can't generate file [<>] because it is ReadOnly'
+#DEFINE C_CONFIGFILE_LOC 'ConfigFile:'
+#DEFINE C_CONVERTER_UNLOAD_LOC 'Converter unload'
+#DEFINE C_CONVERTING_FILE_LOC 'Converting file'
+#DEFINE C_DATA_ERROR_CANT_PARSE_UNPAIRING_DOUBLE_QUOTES_LOC 'Data Error: Cant't parse because unpairing double-quotes on line <>'
+#DEFINE C_DUPLICATED_FILE_LOC 'Duplicated file'
+#DEFINE C_ENDDEFINE_MARKER_NOT_FOUND_LOC 'No se ha encontrado el marcador de fin [ENDDEFINE] de la línea <> para el identificador [<>]'
+#DEFINE C_END_MARKER_NOT_FOUND_LOC 'Can't found end marker [<>] that closes start marker [<>] on line <>'
+#DEFINE C_FIELD_NOT_FOUND_ON_FILE_STRUCTURE_LOC 'Field [<>] not found on structure of file <>'
+#DEFINE C_FILE_DOESNT_EXIST_LOC 'File doesn't exist:'
+#DEFINE C_FILE_NAME_IS_NOT_SUPPORTED_LOC 'File [<<.c_InputFile>>] is not supported'
+#DEFINE C_FILE_NOT_FOUND_LOC 'File not found'
+#DEFINE C_EXTENSION_RECONFIGURATION_LOC 'Extension Reconfiguration:'
+#DEFINE C_FOXBIN2PRG_ERROR_CAPTION_LOC 'FOXBIN2PRG: ERROR!!'
+#DEFINE C_FOXBIN2PRG_INFO_SINTAX_LOC 'FOXBIN2PRG: SINTAXIS INFO'
+#DEFINE C_FOXBIN2PRG_INFO_SINTAX_EXAMPLE_LOC 'FOXBIN2PRG [cType_NA cTextName_NA cGenText_NA cDontShowErrors cDebug cDontShowProgress cOriginalFileName cRecompile]' + CR_LF + CR_LF ;
+ + 'Example to generate TXT of all VCX of "c:\desa\clases", without showing error window and generating LOG file: ' + CR_LF ;
+ + ' FOXBIN2PRG "c:\desa\clases\*.vcx" "0" "0" "0" "1" "1"' + CR_LF + CR_LF ;
+ + 'Example to generate TXT of all VCX of "c:\desa\clases", without showing error window and without LOG file: ' + CR_LF ;
+ + ' FOXBIN2PRG "c:\desa\clases\*.vc2" "0" "0" "0" "1" "0"'
+#DEFINE C_FOXBIN2PRG_JUST_VFP_9_LOC 'FOXBIN2PRG is only for Visual FoxPro 9.0!'
+#DEFINE C_FOXBIN2PRG_WARN_CAPTION_LOC 'FOXBIN2PRG: WARNING!'
+#DEFINE C_MENU_NOT_IN_VFP9_FORMAT_LOC 'Menu [<>] is NOT VFP 9 Format! - Please convert to VFP 9 with MODIFY MENU <>'
+#DEFINE C_OBJECT_NAME_WITHOUT_OBJECT_OREG_LOC 'Object [<>] does not contain oReg object (level <>)'
+#DEFINE C_NAMES_CAPITALIZATION_PROGRAM_FOUND_LOC '* Names capitalization program [<>] found'
+#DEFINE C_NAMES_CAPITALIZATION_PROGRAM_NOT_FOUND_LOC '* Names capitalization program [<>] not found'
+#DEFINE C_ONLY_SETNAME_AND_GETNAME_RECOGNIZED_LOC 'Operation not recognized. Only SETNAME and GETNAME allowed.'
+#DEFINE C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC 'Optimization: Output file [<>] is not overwriten because it is the same as the genereted.'
+#DEFINE C_PROCEDURE_NOT_CLOSED_ON_LINE_LOC 'Procedure not closed. Last line of code must be ENDPROC. [<>]'
+#DEFINE C_PROCESSING_LOC 'Processing file'
+#DEFINE C_PROCESS_PROGRESS_LOC 'Process Progress:'
+#DEFINE C_PROPERTY_NAME_NOT_RECOGNIZED_LOC 'Property [<>] is not recognized.'
+#DEFINE C_REQUESTING_CAPITALIZATION_OF_FILE_LOC '- Requesting capitalization of file [<>]'
+#DEFINE C_SOURCEFILE_LOC 'Source file: '
+#DEFINE C_STRUCTURE_NESTING_ERROR_ENDPROC_EXPECTED_LOC 'Nesting structure error. ENDPROC expected but found ENDDEFINE on class <> (<>), line <> of file <>'
+#DEFINE C_STRUCTURE_NESTING_ERROR_ENDPROC_EXPECTED_LOC 'Nesting structure error. ENDPROC expected but found ENDDEFINE on class <> (<>.<>), line <> of file <>'
+#DEFINE C_UNKNOWN_CLASS_NAME_LOC 'Unknown class [<>]'
+#DEFINE C_WARN_TABLE_ALIAS_ON_INDEX_EXPRESSION_LOC 'WARNING!!' + CR_LF+ 'MAKE SURE YOU ARE NOT USING A TABLE ALIAS ON INDEX KEY EXPRESSIONS!! (ex: index on <>.campo tag keyname)'