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)'