FOXBIN2PRG: Nuevo reemplazo Open Source del SCCTEXT.PRG - Ayuda para Pruebas

1,216 views
Skip to first unread message

Fernando D. Bozzo

unread,
Nov 21, 2013, 7:44:42 PM11/21/13
to publice...@googlegroups.com
Hola a tod@s:

Como comenté hace algún tiempo, estoy trabajando en un reemplazo Open Source para el SCCTEXT de FoxPro, que es un programa que sirve para generar una vista de texto de los binarios (forms, clases, proyectos, etc) generalmente usado con herramientas de control de código fuente como SourceSafe, Subversion, CVS y otras.

El programa parece estable y, a diferencia del SCCTEXT, FOXBIN2PRG permite volver a regenerar los binarios desde la vista de texto generada, lo que lo hace ideal para merge visual (mezcla de cambios a dos o tres paneles con WinMerge o similar).

** Si hay interesados en probarlo, ya que el desarrollo lo acabo de terminar y es para toda la comunidad (adjunto PRG), necesitaría que me reporten cualquier problema que se encuentren, ya que está en fase Beta (pruebas).

Como se usa:
DO FOXBIN2PRG.PRG WITH "<ruta>\unproyecto.PJX"      && Genera archivo TEXTO "<ruta>\unProyecto.PJ2"
DO FOXBIN2PRG.PRG WITH "<ruta>\unproyecto.PJ2"      && Regenera archivo BINARIO "<ruta>\unProyecto.PJX"

DO FOXBIN2PRG.PRG WITH "<ruta>\unproyecto.SCX"      && Genera archivo TEXTO "<ruta>\unForm.SC2"
DO FOXBIN2PRG.PRG WITH "<ruta>\unproyecto.SC2"      && Regenera archivo BINARIO "<ruta>\unForm.SCX"

DO FOXBIN2PRG.PRG WITH "<ruta>\unproyecto.VCX"      && Genera archivo TEXTO "<ruta>\unaLibreria.VC2"
DO FOXBIN2PRG.PRG WITH "<ruta>\unproyecto.VC2"      && Regenera archivo BINARIO "<ruta>\unaLibreria.VCX"


Tipos de archivos soportados:
PJX, SCX, VCX

Extensiones generadas:
PJ2, SC2, VC2

Los archivos de texto son como PRGs, pero pueden no compilar (y es correcto igual), ya que solo están pensados para cumplir 2 funciones:
1) Servir de backup de los binarios, pudiendo regenerarlos
2) Servir para hacer merge entre 2 archivos, permitiendo su modificación como paso intermedio para para regenerar los binarios

El programa genera una backup secuencial de los archivos binarios antes de regenerarlos.

Cualquier problema, duda o pregunta, por favor enviarme un ejemplo a fdbozzo-at-gmail.com de la clase, form o proyecto que no se haya exportado correctamente, y cualquier duda la resolvemos en el foro.

Hasta donde yo sé, este es el primer reemplazo conocido del SccTextX (de CodePlex), que a su vez fue el sucesor del SccText.


Gracias a tod@s!

foxbin2prg.prg

Claudio Luna

unread,
Nov 21, 2013, 7:50:00 PM11/21/13
to Comunidad de Visual Foxpro en Español
Fernando,
Felicitaciones por tu aporte y muchas gracias por compartirlo,
Lo probaré y te comento como mue fue.
Nuevamente, feliciaciones
Un saludo
Claudio
--
Claudio Luna
Monttevideo - Uruguay
SKYPE: clunamarin
Cel. 099 194 770

HernanCano

unread,
Nov 21, 2013, 8:40:40 PM11/21/13
to publice...@googlegroups.com
Claro, Fernando.
Lo probaré y te comentaré.

Chao.



El jueves, 21 de noviembre de 2013 19:44:42 UTC-5, Fernando D. Bozzo escribió:
Hola a tod@s:

Como comenté hace algún tiempo, estoy trabajando en un reemplazo Open Source para el SCCTEXT de FoxPro, que es un programa que sirve para generar una vista de texto de los binarios (forms, clases, proyectos, etc) generalmente usado con herramientas de control de código fuente como SourceSafe, Subversion, CVS y otras.

El programa parece estable y, a diferencia del SCCTEXT, FOXBIN2PRG permite volver a regenerar los binarios desde la vista de texto generada, lo que lo hace ideal para merge visual (mezcla de cambios a dos o tres paneles con WinMerge o similar).

** Si hay interesados en probarlo, ya que el desarrollo lo acabo de terminar y es para toda la comunidad (adjunto PRG), necesitaría que me reporten cualquier problema que se encuentren, ya que está en fase Beta (pruebas).

César Pistiner

unread,
Nov 21, 2013, 10:02:48 PM11/21/13
to publice...@googlegroups.com

Buenas noches!

Qué buena noticia Fernando! Voy a ver si puedo hacer que nuestro equipo de VFP pueda darle una buena prueba!

Desde ya mucha gracias por el aporte!

Saludos,
César

Fernando D. Bozzo

unread,
Nov 22, 2013, 8:34:00 AM11/22/13
to publice...@googlegroups.com
Adjunto nueva versión con corrección de algunos bugs.

Importante:
Aunque se pretende sustituir la funcionalidad del SCCTEXT, FOXBIN2PRG usa extensiones distintas, por lo que por ahora no se puede configurar dentro de Fox en Tools/Options/projects/text generation. De momento la forma de usarlo es como puse en el ejemplo.

Saludos.-
foxbin2prg.prg

edgar suarez kummers

unread,
Nov 22, 2013, 9:00:36 AM11/22/13
to publice...@googlegroups.com
Buenas Fernando:

Tengo una pregunta que hacerte y que se puede generalizar a muchos de los "software" que se consiguen hoy en día, inclusive los de Microsoft quien en la práctica instituyó la siguiente modalidad.

¿ Para qué sirve algo en nuestra época ?

O sea, agradezco mucho tu aplicación y veo los ejemplos, pero por favor algo así como:

"En caso de la siguiente necesidad ... y con el propósito de ... use en tales eventos ... "

Saludos y gracias

Fernando D. Bozzo

unread,
Nov 22, 2013, 9:22:17 AM11/22/13
to publice...@googlegroups.com
Hola Edgar, no sé si estás muy filosófico o yo muy espeso, pero no entendí tu pregunta.

O sea:

>> ¿ Para qué sirve algo en nuestra época ?

¿Que para qué sirve algo en nuestra época? Edgar, si estamos en estos foros se supone que sabemos para qué nos sirve lo que estamos usando, y si se siguen publicando cosas, como herramientas y demás, es porque se quiere compartir por simple altruismo o porque se quiere ganar algún dinero.

Si preguntabas otra cosa, por favor explicate mejor.

Saludos.-

Geovanny Quiros Castillo

unread,
Nov 22, 2013, 9:28:20 AM11/22/13
to publice...@googlegroups.com
Edgar es como de otro planeta, de verdad que cuesta entenderle.
Pobres de sus estudiantes, seguro la tasa de mortalidad en sus clases debe ser alta Guiño
wlEmoticon-winkingsmile[1].png

Saúl Piña

unread,
Nov 22, 2013, 10:17:33 AM11/22/13
to publice...@googlegroups.com
Parafraseando lo que dice el buen Edgar:

¿ Para qué sirve algo en nuestra época ? es decir en qué pudiese funcionar o donde podemos implementarlo para nuestros softwares?

O sea, agradezco mucho tu aplicación y veo los ejemplos, pero por favor algo así como:

"En caso de la siguiente necesidad ... y con el propósito de ... use en tales eventos ... "

es decir, Cual sería el cambio o mejora que se pudiese presentar al momento de aplicar tu prg?


Espero no ENREDAR aún más la filosofía de Edgar,

Gracias.

Alfonso Arias Lemas

unread,
Nov 22, 2013, 10:18:55 AM11/22/13
to Lista Google VFP
Bueno, yo reconozco que estoy perdido en esto. Para que sirve este  FOXBIN2PRG??
Disculpa Fernando por la ignorancoa......
 
 
Saludos,
   Alfonso
 
 
 
 
-------Mensagem original-------

Patricio Muñoz

unread,
Nov 22, 2013, 10:34:12 AM11/22/13
to publice...@googlegroups.com
la verdad es que yo tambien desconosco para que pueda servir eso, ni siquiera se para que sirve el SCCTEXT.PRG, y si lo he usado, ni me he dado cuenta.

Bendiciones 
--
Patricio Muñoz
Pro&Tech
Analista en Sistemas

Fidel Charny

unread,
Nov 22, 2013, 10:41:21 AM11/22/13
to publice...@googlegroups.com
Ah, Fernando, que buen laburo! 
La finalidad está claramente descrita en el mismo archivo prg. Es muy profesional.
Hasta ahora he probado solamente el binario a Txt para pjx, scx y vcx sin problemas. La exposición de los txt me parece fantástica.
Estoy revisando un viejo proyecto (abandonado) en el cual pasaba a prg propiedades, métodos, definiciones de objetos y recuento de líneas para ver si puedo aportar alguna idea (difícil, muy difícil [ex-gobernador C.A.Reutemann]). 
Trato de seguirte, como siempre.

Un abrazo
Fidel.

Jorge L. Florez C.

unread,
Nov 22, 2013, 10:50:27 AM11/22/13
to publice...@googlegroups.com
Bueno.. parece que las personas bajan el programa y ni leen lo que escribio Fernando y la verdad Edgar.... yo creo que, lo que escribiste es Joda, otra razon no le veo...

Saludos
Jorge Florez
Lima - Perú

HernanCano

unread,
Nov 22, 2013, 11:00:49 AM11/22/13
to publice...@googlegroups.com
Lo primero que dijo Fernando fue:

>>>... un reemplazo Open Source para el SCCTEXT de FoxPro, que es un programa que sirve para generar una vista de texto de los binarios (forms, clases, proyectos, etc) generalmente usado con herramientas de control de código fuente como SourceSafe, Subversion, CVS y otras.

Sólo es necesario leer, chicos.

HernanCano

unread,
Nov 22, 2013, 11:01:36 AM11/22/13
to publice...@googlegroups.com
Lo primero que dijo Fernando fue:

>>>... un reemplazo Open Source para el SCCTEXT de FoxPro, que es un programa que sirve para generar una vista de texto de los binarios (forms, clases, proyectos, etc) generalmente usado con herramientas de control de código fuente como SourceSafe, Subversion, CVS y otras.

Sólo es necesario leer, chicos.


Fer

unread,
Nov 22, 2013, 11:17:08 AM11/22/13
to publice...@googlegroups.com

No pasa nada chicos, se los explico, ya que en este foro sé que no son muchos los que usan control de código fuente.
Desde los 90 (y puede que bastante antes en algunos países, pero yo lo conocí en esa época) se dejó de usar la técnica de ir guardando copias de los programas a medida que se agregan o modifican cosas, que muchos hacíamos en zip o creando subcarpetas, ya que esa técnica tiene varios problemas que se multiplican cuando el equipo de desarrollo tiene más de 1 o 2 personas, y es que trabajando cada uno sobre su copia es muy difícil saber que cosas modificó cada uno cuando se tocan componentes comunes como forms, clases, programas, etc, y la revisión manual de archivo por archivo era muy costosa.
Por eso se crearon las herramientas de control de código, que permiten centralizar todas las modificaciones en un repositorio, donde cada uno puede integrar sus cambios y ver los cambios anteriores suyos y de los demás, cosa super útil para encontrar fallos o volver a una versión anterior.
Esto en el resto de lenguajes que son orientados a texto es fácil, ya que los cambios se ven a 2 ventanas, en la izquierda la versión anterior de un archivo y en la derecha la versión más nueva, de forma que coincidan las líneas de programa lo más posible y con resaltes de color en los bloques de código nuevo, modificado o eliminado.
El problema es que en FoxPro el 80% o más de los archivos son binarios (vcx, scx, frx, lbx, mnx) y para solucionarlo se creó el SCCTEXT, un programa que viene con FoxPro y que se encarga de generar vistas de texto de esos binarios, pero que sólo permite ver las diferencias y no hacer "merge", que consiste en poder pasar cambios visualmente de un lado al otro de la comparación de código, y es justamente ésta la mayor ventaja del tema, y donde más tiempo se ahorra, ya que tradicionalmente en FoxPro se abre el formulario o clase y se le pasan a mano los métodos o controles que se quieran del formulario o clase a integrar, porque no siempre es posible reemplazarlo entero.
Para suplir esa carencia del SCCTEXT es que hice este programa.

Si todavía no están usando control de código, aunque sean los únicos que modifican sus programas, no tienen idea de lo que se están perdiendo y la productividad que pueden tener en varias situaciones.

Luego busco algunos artículos sobre el tema para que puedan leer más sobre esto, que para desarrolladores individuales es muy bueno, pero para equipos es totalmente indispensable.

Espero haber aclarado un poco el tema, y si no sigan preguntando por lo que no entiendan.

Saludos!

Hernan Cano

unread,
Nov 22, 2013, 11:30:46 AM11/22/13
to publice...@googlegroups.com
Bien, Fernando.
Así es...


Patricio Muñoz

unread,
Nov 22, 2013, 11:37:01 AM11/22/13
to publice...@googlegroups.com
Haaa ok... ahora entiendo para que sirve..... gracias..... yo utilizo el programa SourceSafe para controlar las versiones de los programas.... no tenia idea que fox tenia este utilitario..... siempre se aprenden cosas nuevas.

Bendiciones


El 22 de noviembre de 2013 12:30, Hernan Cano <jherna...@gmail.com> escribió:
Bien, Fernando.
Así es...


Alfonso Arias Lemas

unread,
Nov 22, 2013, 2:21:13 PM11/22/13
to Lista Google VFP
Ok gracias Hernan, lo que pasa que a mi los años me han caído encima y me cansan la vista, por eso leo poco pero con gente como tu andamos, ya me tiraste un cabo, ves .....
 
Saludos,
  Alfonso
 
 
 
 
-------Mensagem original-------

Alfonso Arias Lemas

unread,
Nov 22, 2013, 2:23:44 PM11/22/13
to Lista Google VFP
Gracias Fernando..... 
 
 
 
 
-------Mensagem original-------

Luis M.

unread,
Nov 23, 2013, 7:23:23 AM11/23/13
to publice...@googlegroups.com
Gracias Fernando por tu aporte. Creo que el tema es muy muy interesante...

Solamente un par de dudas:

1ª He hecho unas pequeñas pruebas pero con los formularios obtengo un archivo de texto SC2 que entiendo que no contiene todas las propiedades y métodos del formulario (adjunto archivo).

2ª ¿Que programa recomiendas para hacer el Merge con los archivos generados?

Gracias y un saludo,
Luis Martínez.
ACERCADE.SC2

Fidel Charny

unread,
Nov 23, 2013, 7:41:25 AM11/23/13
to publice...@googlegroups.com
Luis M.:
Me resulta extraño que Acercade.sc2 no tenga nada. Salvo que el form en sí no tenga nada y agregas todo desde un proc. externo.
Ahí subo un ejemplo, nada más para que veas el formato.
KALCOSPER.SC2

Fernando D. Bozzo

unread,
Nov 23, 2013, 8:33:20 AM11/23/13
to publice...@googlegroups.com
Buenos días:

Adjunto nueva versión 1.2 con los siguientes cambios:
- Arreglo de bugs: soporte nombres de archivo con espacios
- Refactorización, limpieza de código y renombrado de algunos métodos
- Nuevos parámetros para permitir acticar la depuración desde la linea de comandos
- Por defecto se muestran los mensajes de error en Messagebox, pudiendo desactivarse con un parámetro

Saludos.-
foxbin2prg.zip

Fernando D. Bozzo

unread,
Nov 23, 2013, 8:36:48 AM11/23/13
to publice...@googlegroups.com
Hola Luis, contesto sobre tu correo y de paso te comento que ya subí la versión 1.2 aquí:

bin2prg 1.2:
https://groups.google.com/d/msg/publicesvfoxpro/wIaAWCaURcg/ydlqZQTM2F4J




El sábado, 23 de noviembre de 2013 13:23:23 UTC+1, Luis M. escribió:
Gracias Fernando por tu aporte. Creo que el tema es muy muy interesante...

Solamente un par de dudas:

1ª He hecho unas pequeñas pruebas pero con los formularios obtengo un archivo de texto SC2 que entiendo que no contiene todas las propiedades y métodos del formulario (adjunto archivo).

No, debe contener todas las propiedades, métodos y objetos, absolutamente todo para poder regenerar el SCX
 

2ª ¿Que programa recomiendas para hacer el Merge con los archivos generados?

El WinMerge, es fantástico:  http://winmerge.org/

 

Fernando D. Bozzo

unread,
Nov 23, 2013, 8:42:52 AM11/23/13
to publice...@googlegroups.com
Olvidé comentarte que si encontrás que el SC2 no tiene todo loque debería, por favor adjuntame --si podés-- el formulario así lo analizo a ver que puede ser.

Gracias.-

Fidel Charny

unread,
Nov 23, 2013, 9:36:06 AM11/23/13
to publice...@googlegroups.com
Fernando:
Tal vez sería interesante tener, para la vista rápida, una especie de mapa del objeto. Te envío una muestra de un trabajo que empecé algún tiempo atrás y quedó ahí, solamente para mostrar la idea. Podría ser en un archivo anexo o bien, en un tag de comentarios. En el formcli.txt, lo que viene después de <objeto1> es irrelevante.
El .sc2 es con la última versión que publicaste. El otro es el cachivache mio.

Saludos
Fidel


El jueves, 21 de noviembre de 2013 21:44:42 UTC-3, Fernando D. Bozzo escribió:
formcli.txt
FORMCLI.SC2

Fernando D. Bozzo

unread,
Nov 23, 2013, 10:08:51 AM11/23/13
to publice...@googlegroups.com

Hola Fidel, creo que esto debería poder servirte

Fidel Charny

unread,
Nov 24, 2013, 11:26:23 AM11/24/13
to publice...@googlegroups.com
Oh, I Understood. Sorry to bother you with my foolishnesses. 

Fernando D. Bozzo

unread,
Nov 24, 2013, 1:42:47 PM11/24/13
to publice...@googlegroups.com
Creo que con esa herramienta es suficiente, no? O te referías a otra cosa más específica?

Fernando D. Bozzo

unread,
Nov 24, 2013, 5:39:10 PM11/24/13
to publice...@googlegroups.com
Adjunto nueva versión 1.3 con los siguientes cambios:
- Optimización: Nuevo algoritmo de evaluación de reconocimiento de propiedades y valores

- Refactorización, limpieza de código y renombrado de algunos métodos
- Agregado el soporte de algunos campos más de los vcx/scx/pjx que no se estaban guardando (objref, nologo, cmntstyle, savecode )


Saludos.-
foxbin2prg.zip

Fernando D. Bozzo

unread,
Nov 26, 2013, 6:01:48 PM11/26/13
to publice...@googlegroups.com
Buenas noches:

Esta es la versión 1.4 de foxbin2prg, que contiene los siguientes cambios:

- Agregado soporte de comodines para proceso batch (DO foxbin2prg.prg WITH "c:\directorio\*.vcx")
- Agregado soporte de archivo de configuración para poder cambiar las extensiones generadas y hacerlo compatible con SourceSafe (foxbin2prg.cfg)
- Agregado nuevo parámetro para generar archivo LOG de depuración
- Optimizaciónes, encapsulación, limpieza de código

Link de descarga:
https://drive.google.com/file/d/0B_qHXcWqGDY-RXd5THlVdkd5OUk/edit?usp=sharing


Saludos.-

edgar suarez kummers

unread,
Nov 26, 2013, 6:15:38 PM11/26/13
to publice...@googlegroups.com
Buenas Fernando:
Muy loable tu labor con este programa.
Te felicito de corazón por tu altruismo. 

ZeRoberto

unread,
Nov 26, 2013, 6:18:13 PM11/26/13
to publicesvfoxpro
Edgar, No te huele a pedo de burra? jejeje

edgar suarez kummers

unread,
Nov 26, 2013, 6:42:53 PM11/26/13
to publice...@googlegroups.com
No, porque no es sueño, es una realidad lo de Fernando.
Vino de Alemania mi compañero del colegio Klaus Madlener, profesor titular en la Escuela Superior Técnica en Kaiserslautern, de Alemania, quien ha ganado para su Universidad varias veces (tampoco demasiadas) el primero y segundo lugares en el Mundo en concursos de comprobación y exposición de algoritmos informáticos frente a Universidades gringas, Japonesas, ... etc ... en fin a todas las más importantes.
Le comenté mi acertijo del "pedo de burra" y las razones para decirlo y en principio me dijo que por la complejidad del tema y en vista de que una sola persona lo pretende hacer, es factible que me asista la razón.
Y es que el Quijote ya murió hacia el 1600 de nuestra era, cuando solo enfrentaba a los colosos (los molinos), ..., 
Si me equivoco me disculpo por la ofensa, pero de otra forma es una manera de hacer bajar a alguien de una Nube.
Saludos agradecido por su atención

Luis Maria Guayan

unread,
Nov 26, 2013, 9:56:26 PM11/26/13
to publice...@googlegroups.com
Excelente Fernando, como todas tus herramientas que compartes.

Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________

Fernando D. Bozzo

unread,
Nov 27, 2013, 4:07:06 AM11/27/13
to publice...@googlegroups.com
Versión de mantenimiento 1.5 de foxbin2prg:

- Arreglo de bug: Encontré el problema que había reportado Luis M. donde no le exportaba todo el form, sino solo una parte. Este bug afectaba a los archivos SCX

Enlace de descarga:
https://drive.google.com/file/d/0B_qHXcWqGDY-YTZzNEhmTXVqRG8/edit?usp=sharing

Saludos.-

Luis M.

unread,
Nov 27, 2013, 7:34:48 AM11/27/13
to publice...@googlegroups.com
Gracias Fernando, lo probaré.

Y me uno a las felicitaciones por tus aportes.

Saludos,
Luis M.

Fer

unread,
Nov 27, 2013, 10:56:43 AM11/27/13
to publice...@googlegroups.com

Muchas gracias por el reporte, en cuanto llegue a casa lo miro.
También detecté un problema con las propiedades que guardan valores con CR/LF (poco común, pero existen) que estoy analizando como solucionar.
Recuerden tener backup siempre, que esto está en pruebas todavía.

Saludos!

Andrés Oscar Gimbatti

unread,
Nov 27, 2013, 3:13:09 PM11/27/13
to publice...@googlegroups.com
Hola,
me parecio espectacular el funcionamiento, pero tengo una pregunta: funciona con vfp6?
para correr foxbin2prg.prg uso vfp9 porque dentro utiliza el comando try, pero los formularios los corro en vfp6.
Cuando vuelvo a crear el form y lo quiero abrir desde vfp6 me da el siguiente error:
"error al cargar el archivo - numero de registro 79. header1  <o uno de sus miembros>. Primario: la clase de objeto no es valida para este contenedor."

Saludos

PD: muchisimas gracias por compartir esta herramienta.

Fidel Charny

unread,
Nov 27, 2013, 3:25:07 PM11/27/13
to publice...@googlegroups.com
Fernando:
Me olvidé de adjuntar los Sc2 que se generan a partir del form original y el regenerado. Aparentemente son iguales.
Estos son los tamaños de los archivos.
Originales:
showgrid.SCT 57.989 26/11/2013 09:36 -a--
showgrid.scx 2.559 26/11/2013 09:36 -a--

Regenerados:
SHOWGRID.SCT 61.248 27/11/2013 12:15 -a--
SHOWGRID.SCX 2.559 27/11/2013 12:15 -a--

Fidel.

El miércoles, 27 de noviembre de 2013 12:42:53 UTC-3, Fidel Charny escribió:
Estimado Fernando:
No sé si debía a esta altura, pero intenté revertir para un form, o sea, pasar de sc2 a scx.
El scx se forma aparentemente bien, con igual size que el original.
El sct se forma con algún defecto, con size mayor que el original.
Con mi analizador casero, pude detectar algún problema, aunque no puedo asegurar que es todo. Si intentás abrir el formulario regenerado en el diseñador, se cuelga todo.
De todos modos te adelanto un problema en la conformación de las propiedades array.
El showgrid_rec.txt es sobre el regenerado. El showgrid_ori es sobre el original. Y en showgrid_dif te comento los problemas que encontré.
No te envío los form por el tema de las clases.

Muchas gracias
Fidel.
SHOWGRID_rec.SC2
SHOWGRID_ori.SC2

Fernando D. Bozzo

unread,
Nov 27, 2013, 4:31:55 PM11/27/13
to publice...@googlegroups.com
Hola Andrés:

Está hecho en VFP 9 y uso cada comando y truco que me permite VFP 9, por lo que no va a funcionar en VFP 6, pero hay una alternativa, y es que podés hacer un EXE en VFP con foxbin2prg y un config.fpw que tenga RESOURCE=OFF y SCREEN=OFF y luego lo podés usar con VFP 6 como programa externo, ya que al ser un EXE usará el runtime de VFP 9.

Ojo que está en pruebas y todavía hay varias cosas por corregir.


Saludos.-

Andrés Oscar Gimbatti

unread,
Nov 27, 2013, 4:41:50 PM11/27/13
to publice...@googlegroups.com
Muchas gracias por la pronta respuesta.
Lo voy a probar como me decis.

Saludos

--
Andrés O. Gimbatti
e-mail: aogim...@gmail.com

Fidel Charny

unread,
Nov 28, 2013, 9:41:18 AM11/28/13
to publice...@googlegroups.com
Fernando:
Te comento sobre la construcción de vcx a partir de un archivo vc2
Size Original:
newclase.VCT 603.464 26/11/2013 09:37 -a--
newclase.vcx 19.453 26/11/2013 09:37 -a--

Size Reconstruida
NEWCLASE.VCT 637.184 28/11/2013 11:02 -a--
NEWCLASE.VCX 19.454 28/11/2013 11:02 -a--

Newclase_ori.Vc2 es el resultado de foxbin2prg para el original.
Newclase_gen.vc2 es el resultado de foxbin2prg para la biblioteca obtenida
Difentre es un precario analizador por línea entre los dos archivos. Hasta la línea 2182 las diferencias están en los zorder. Luego se produce un problema: en la versión "gen" aparecen llamadas a funciones que deberían estar dentro de eventos GotFocus, Click y LostFocus de los CommandButton. 

&& FoxBin2Prg del original
&& línea 2168
&&... Continua ...
PROCEDURE Aproxim.LostFocus
SET CONFIRM OFF"
cAproxim = ""
This.refresh"
With thisform
.TxAprox.Value = cAproxim
.TxAprox.Visible = .f.
.TxActual.Visible=.f.
.iM1.Visible=.t.
.ThMovim1.Setall("Enabled",.t.)
.Grilla.Refresh
.Grilla.SetFocus
endwith
ENDPROC

ENDDEFINE

DEFINE CLASS ficha AS commandgroup
*< CLASSDATA: Baseclass="commandgroup" Timestamp="2013/02/15 17:26:16" Scale="Pixels" Uniqueid="_2UF0OFF3Z" />
BackColor = 221,226,222
ButtonCount = 4
Command1.Caption = ""
Command1.DisabledPicture = ..\graphics\bgaddn.bmp
Command1.Height = 22
Command1.Left = 4
Command1.Name = "Cma"
Command1.Picture = ..\graphics\bgadd.bmp
Command1.ToolTipText = "Agregar un Registro"
Command1.Top = 3
Command1.Width = 26
Command2.Caption = ""
Command2.DisabledPicture = ..\graphics\bgmod2n.bmp
Command2.Height = 22
Command2.Left = 31
Command2.Name = "Cmm"
Command2.Picture = ..\graphics\bgmod2.bmp
Command2.ToolTipText = "Modificar el Registro Señalado"
Command2.Top = 3
Command2.Width = 26
&&... Sigue

** -------------------------------------------------------------
&& FoxBin2prg de la bibiloteca reconstruida
&& Linea 2168
PROCEDURE Aproxim.LostFocus
SET CONFIRM OFF
cAproxim = ""
This.refresh
With thisform
.TxAprox.Value = cAproxim
.TxAprox.Visible = .f.
.TxActual.Visible=.f.
.iM1.Visible=.t.
.ThMovim1.Setall("Enabled",.t.)
.Grilla.Refresh
.Grilla.SetFocus
endwith
Thisform.GesFicha("A")
Thisform.FunFormu1.PutRaya(This)
Thisform.FunFormu1.PutRaya()
Thisform.GesFicha("Q")
Thisform.FunFormu1.PutRaya(This)
Thisform.FunFormu1.PutRaya()
Thisform.GesFicha("C")
Thisform.FunFormu1.PutRaya(This)
Thisform.FunFormu1.PutRaya()
Thisform.GesFicha("M")
Thisform.FunFormu1.PutRaya(This)
Thisform.FunFormu1.PutRaya()
ENDPROC

ENDDEFINE

DEFINE CLASS ficha AS commandgroup
*< CLASSDATA: Baseclass="commandgroup" Timestamp="2013/02/15 17:26:16" Scale="Pixels" Uniqueid="_2UF0OFF3Z" />
BackColor = 221,226,222
ButtonCount = 4
Command1.Caption = ""
Command1.DisabledPicture = ..\graphics\bgaddn.bmp
Command1.Height = 22
Command1.Left = 4
Command1.Name = "Cma"
Command1.Picture = ..\graphics\bgadd.bmp
Command1.ToolTipText = "Agregar un Registro"
Command1.Top = 3
Command1.Width = 26

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
      PROCEDURE
  Aproxim.LostFocus
              SET CONFIRM OFF
              cAproxim = ""
              This.refresh
              With thisform
                      .TxAprox.Value = cAproxim
                      .TxAprox.Visible = .f.
                      .TxActual.Visible=.f.
                      .iM1.Visible=.t.
                      .ThMovim1.Setall("Enabled",.t.)
                      .Grilla.Refresh
                      .Grilla.SetFocus
              endwith
             
      ENDPROC
ENDDEFINE
DEFINE CLASS ficha AS commandgroup
      *< CLASSDATA:
  Baseclass="commandgroup" Timestamp="2013/02/15 17:26:16"
  Scale="Pixels" Uniqueid="_2UF0OFF3Z" />
      BackColor = 221,226,222
      ButtonCount = 4
      Command1.Caption = ""
      Command1.DisabledPicture =
  ..\graphics\bgaddn.bmp
      Command1.Height = 22
      Command1.Left = 4
      Command1.Name = "Cma"
      Command1.Picture =
  ..\graphics\bgadd.bmp
      Command1.ToolTipText = "Agregar un
  Registro"
      Command1.Top = 3
      Command1.Width = 26
      Command2.Caption = ""
      Command2.DisabledPicture =
  ..\graphics\bgmod2n.bmp
      Command2.Height = 22
      Command2.Left = 31
      Command2.Name = "Cmm"
      Command2.Picture =
  ..\graphics\bgmod2.bmp
      Command2.ToolTipText = "Modificar
  el Registro Señalado"
      Command2.Top = 3
      Command2.Width = 26
      Command3.Caption = ""
      Command3.DisabledPicture =
  ..\graphics\ventana5n.bmp
      Command3.Height = 22
      Command3.Left = 58
      Command3.Name = "Cmc"
      Command3.Picture =
  ..\graphics\ventana5.bmp
      Command3.ToolTipText = "Consultar
  el Registro Señalado"
      Command3.Top = 3
      Command3.Width = 26
      Command4.Caption = ""
      Command4.DisabledPicture =
  ..\graphics\destroy3bmn.bmp
      Command4.Height = 22
      Command4.Left = 85
      Command4.Name = "Cmb"
      Command4.Picture =
  ..\graphics\destroy3bm.bmp
      Command4.ToolTipText = "Eliminar
  el Registro Señalado"
      Command4.Top = 3
      Command4.Width = 26
      Height = 28
      Name = "ficha"
      Value = 1
      Width = 115

El miércoles, 27 de noviembre de 2013 12:42:53 UTC-3, Fidel Charny escribió:
Estimado Fernando:
No sé si debía a esta altura, pero intenté revertir para un form, o sea, pasar de sc2 a scx.
El scx se forma aparentemente bien, con igual size que el original.
El sct se forma con algún defecto, con size mayor que el original.
Con mi analizador casero, pude detectar algún problema, aunque no puedo asegurar que es todo. Si intentás abrir el formulario regenerado en el diseñador, se cuelga todo.
De todos modos te adelanto un problema en la conformación de las propiedades array.
El showgrid_rec.txt es sobre el regenerado. El showgrid_ori es sobre el original. Y en showgrid_dif te comento los problemas que encontré.
No te envío los form por el tema de las clases.

Muchas gracias
Fidel.



El miércoles, 27 de noviembre de 2013 06:07:06 UTC-3, Fernando D. Bozzo escribió:
Difentre.txt
NEWCLASE_gen.VC2
NEWCLASE_ori.VC2

Fidel Charny

unread,
Nov 28, 2013, 9:44:19 AM11/28/13
to publice...@googlegroups.com
Fernando, en el post anterior hice un barro: ese código que aparece suelto abajo pasalo por alto.
Fidel.

Fer

unread,
Nov 28, 2013, 9:53:53 AM11/28/13
to publice...@googlegroups.com

No te preocupes Fidel, ya tengo identificado el problema de los array y estoy trabajando en ello.

Gracias!

Fernando D. Bozzo

unread,
Dec 1, 2013, 7:24:05 PM12/1/13
to publice...@googlegroups.com
Buenas noches:

Dejo para descarga la versión 1.6 de foxbin2prg, con los siguientes cambios:

- Refactorización completa de la generación de texto (sc2,vc2) y binarios (scx,vcx)
- Cambios en varios algoritmos para facilitar su mantenimiento y lectura
- Arreglo del problema reportado por Fidel Charny respecto de los arrays
- Mejora en el manejo de propiedades con valores conteniendo CR, LF y CR+LF
- Agregado de varios tests automatizados con FoxUnit
- Se han hecho pruebas sobre más de 500 forms y clases de distinta complejidad para comprobar que que se arman, funcionan y ven igual que el original
- Limpieza de código

https://drive.google.com/file/d/0B_qHXcWqGDY-Tm1HelQydjVKTTg/edit?usp=sharing

Fernando D. Bozzo

unread,
Dec 1, 2013, 7:30:26 PM12/1/13
to publice...@googlegroups.com
Hola:

Pongo esto en un post aparte para no mezclar temas.

Una de las cosas que se me ocurrió que podría ser muy útil es la generación de la versión texto de las estructuras de las tablas, indices y bases de datos, cosa que se puedan restaurar los binarios usando los textos equivalentes, aunque obviamente sin datos para no saturar la herramienta de SCM que se use.

Me gustaría conocer opiniones sobre esto, posibles alternativas, ideas, etc, pero al final se trata de poder restaurar todo el código y las estructuras, con lo que, teniendo a mano un backup de los datos, se puede poner un puesto de desarrollo operativo con conectarse al SCM, bajarse el proyecto y copiarse o importarse los datos.

Dejo el tema abierto para debate.


Saludos!



edgar suarez kummers

unread,
Dec 2, 2013, 12:09:58 AM12/2/13
to publice...@googlegroups.com
Estimado Fernando: (D. Bozzo)

Un muy buen regalo de Navidad para el grupo.

Ya por sus kilos se aprecia que es un adulto formado, fuerte y útil.

Felicitaciones por tu esfuerzo y por compartirlo.

Saludos y gracias de nuevo.

Fer

unread,
Dec 2, 2013, 1:17:23 AM12/2/13
to publice...@googlegroups.com

De nada Edgar ;-)

Fidel Charny

unread,
Dec 2, 2013, 8:45:45 AM12/2/13
to publice...@googlegroups.com
Estimado Fernando
Recién me reincorporo y agradezco tu atención. En un rato realizaré algunas pruebas con el nuevo Foxbinprg.

<perorata poco soportable>
En cuanto al tema de estructuras de tablas, no se bien el alcance que le quieres dar. Por el momento solo trabajo con tablas nativas y una de las principales preocupaciones (de los tiempos de Clipper) fue la construcción de un par de prg con la programación de generación de tablas e índices, sistema de revisión de estructuras de tablas y test de etiquetas. O sea, cuando instalo mi sistema, no copio ninguna tabla, salvo una local y un archivo de texto que contienen:
(dbf) las tablas que usa el sistema, subcarpeta y comentario de uso
(txt) las etiquetas de índices y las keys
El programa de revisión de estructuras de tablas, cuando no encuentra una tabla automáticamente la genera y deja una marca para generar los índices. Si encuentra la tabla, genera una tabla con la estructura correcta a partir del prg de generación de tablas y compara los aFields() sobre ambas tablas. Si detecta cualquier cambio, hace un append from a la nueva estructura y luego copia la nueva tabla a la posición y nombre de la cambiada.
Entonces, cuando hay que hacer alguna modificación en alguna tabla, no la realizo manualmente, sino que cambio la linea de programa de generación de la estructura de la tabla y llevo una versión actualizada del dbf de tablas. Incluso en mi versión de ensayo no hago cambios manuales.
Igualmente tengo una utilidad para generar tablas nuevas en forma asistida y luego una rutina que genera un código de programa. Este código lo pego en el prg correspondiente.
Como todo esto lo armé para Visual Fox 6.0 y con gran ignorancia de mi parte del enorme potencial de Visual Fox, sale algo como lo que sigue:
 * Procedimiento Generado por Utiles.Genstruc
 * Fecha: 16/05/2003  Hora:00:35
 ***************************
 PROCEDURE FREGFILE(cNameFile)
 **************************
 * Generando Tabla: REGFILE
 If Vartype(cNameFile)#"C"
 cNameFile="VARCHI"
 Endif
 select 0
 CREATE TABLE (DTEMP+"\"+cNameFile) FREE ;
 ("ARCHIVO" C(12),;
 "FORMULA" C(16))
 ENDPROC

 **************************
 PROCEDURE FCHEQUERA(cNamefile)
 **************************
 * Generando Tabla: CHEQUERA
  If Vartype(cNameFile)#"C"
  cNameFile="VARCHI"
 Endif
 SELECT 0
 CREATE TABLE (DTEMP+"\"+cNameFile) FREE ;
 ("IDCHERA" N(5,0),;
 "WB" C(2),;
 "SUFIJO" N(4,0),;
 "BANCO" C(20),;
 "CHEQUERA" C(8),;
 "WTIPO" C(1),;
 "CHETIPO" C(1),;
 "RANGO1" N(12,0),;
 "RANGO2" N(12,0),;
 "ACTUAL" N(12,0),;
 "LUSED" L ,;
 "PRIORI" L ,;
 "ACTIVO" L,;
 "FEGRA" D ,;
 "HOGRA" C(5),;
 "TERMINAL" C(10))
 ENDPROC


También he estado trabajando (y faltan cosas) en recuperación de tablas corruptas, por lo que tengo un desarrollo para regenerar las estructuras de tablas a partir de la apertura en bajo nivel (fopen), identificando los bloques de datos, conteo manual de registros, comparación con la cabecera de la tabla, arreglo de la cabecera, detección de cdx y campos memo y apertura y reconstrucción de archivos FPT. Me falta algo de técnica para detectar registros corruptos. 
Por ejemplo, en un caso ocurrido el sábado, un dbf guardó una cantidad de registros mayor a la real, volviendo a la tabla inusable. Al recuperar la tabla, en el txt de registros, me encuentro con registros de otras tablas y partes de código incomprensible.
</perorata poco soportable>

O sea, si te sirve de algo mi experimentación, aunque más no sea para la "perorata", acá estoy. 

Un abrazo
Fidel.

Fer

unread,
Dec 2, 2013, 9:30:49 AM12/2/13
to publice...@googlegroups.com

Hola Fidel, lo que tengo pensado para foxbin2prg es todo enfocado al control de código fuente, con lo que intento generar algo que sea lo más sencillo posible para el desarrollador y que permita lo siguiente :

1) poder ver las diferencias fácilmente lado a lado
2) permitir aceptar o rechazar los cambios
3) poder hacer un merge de los cambios visualmente

Teniendo esto en cuenta, pensé en generar los comandos que crean las tablas (CREATE TABLE) con los campos de la tabla elegida, que no van a poder estar en orden alfabético porque eso cambiaría su estructura.
También pensé en generar los comandos de los índices (INDEX ON...) que tenga la tabla elegida, ordenados alfabéticamente por su tag
Finalmente pensé en las bases de datos (CREATE DATABASE) con sus reglas de RI y demás
Al final, viendo cada archivo por separado, lado a lado la versión vieja y la nueva, tiene que ser fácil comprobar los cambios hechos y subirlos al SCM.

Me serviría que me comenten si echan algo en falta en lo que comento, o alguna característica que no se me ocurrió, ya que el scctext no tenia estas opciones.

Fidel Charny

unread,
Dec 2, 2013, 10:08:36 AM12/2/13
to publice...@googlegroups.com
Fernando:
En la primer prueba con el 1.6, el formulario se recupera casi totalmente. En código me parece que está todo, bien que el probado no es muy complejo (o la complejidad está en las clases que usa).
El detalle: en el commandgroup, no se recupera el tamaño ni las imágenes de los buttons, aunque sí el código.
Te adjunto las dos imágenes (el "_rec.jpg" es la versión recuperada desde el sc2). y una comparación del campo Properties de ambos archivos.
Como este commandgroup tiene muy poco uso en ese form (o casi ninguno) pude probar que funciona sin problemas.

Muchas gracias
Fidel.
Showgrid.jpg
Showgrid_rec.jpg
CommandGroup.xls

Fidel Charny

unread,
Dec 2, 2013, 10:20:39 AM12/2/13
to publice...@googlegroups.com
Fernando:
Más que echar en falta, ya tenemos para "echar en sobra". Difícilmente se me podría ocurrir algo más, aunque temo que, al generar, por ejemplo, un vc2, aparezca de tanto en tanto una leyenda que me diga algo como esto:
Messagebox("Oiga Viejo!, su código es una verdadera chapuza!.+chr(13)+"Estudie querido, estudie!!!",16,"Fer Cho te observa")

Fidel

Fer

unread,
Dec 2, 2013, 11:01:39 AM12/2/13
to publice...@googlegroups.com

Ya veo, parece que en ese caso no respeta el ZOrder de ese objeto. ¿podrías adjuntar el SC2?

Fernando D. Bozzo

unread,
Dec 2, 2013, 1:40:29 PM12/2/13
to publice...@googlegroups.com
Fidel, gracias a tu ejemplo acabo de descubrir una cosa fea de los SCX: El orden de las propiedades importa, y si no se respeta se pierden algunas en cuanto guardás el form :-(

Que ca**da.

edgar suarez kummers

unread,
Dec 2, 2013, 1:56:51 PM12/2/13
to publice...@googlegroups.com
Buenas Fernando:

Para comparar dos textos existe un programa llamado BEYOND COMPARE.

Lo hace uno por la izquierda y otro por la derecha de la pantalla partida en dos mitades.

Aquello que falta de uno con respecto del otro lo coloca en color rojo creo.

Hace algunos años lo utilizaba, ahora mismo no recuerdo donde lo conseguí.

Me acuerdo mucho del nombre BEYOND COMPARE.

Saludos y gracias por tu fenomenal aporte.


Fidel Charny

unread,
Dec 2, 2013, 3:22:29 PM12/2/13
to publice...@googlegroups.com
Fernando:
Te envío el sc2 del form showgrid. Tiene una clase custom adherida. Si necesitás generar el form te la envío. 
Fidel.
showgrid.sc2

Fidel Charny

unread,
Dec 2, 2013, 3:35:06 PM12/2/13
to publice...@googlegroups.com
Fernando, el tema de los zorder lo había visto para el caso de los vcx. No se si pudiste ver el post sobre la newclase.vcx (el que quedó un tanto desprolijo). 
Fijate en el detalle: También hay un desajuste relacionado con CommandGroup. 

Sin embargo, veo que el problema en los scx está en los commandgroup. En otro ejemplo pasa exactamente lo mismo con 2 commandgroup de 3 botones. El formulario (que tiene pageframe) reconstruido funciona, al menos, hasta donde estuve probando. El único problema son esos commandgroup de los que solo que se ve uno de los tres botones. Los otros están pero quedan ocultos en la forma.

Si junto los problemas de las Vc2/vcx y sc2/scx, antes de preocuparme por el zorder vería alguna cosa particular de los commandgroup.

Ya casi...

Muchas gracias
Fidel.

edgar suarez kummers

unread,
Dec 2, 2013, 3:49:08 PM12/2/13
to publice...@googlegroups.com
Estimado Fernando:

Briega a conseguir BEYOND COMPARE 

Si a un texto le falta algo que tiene el del lado opuesto, abre un espacio similar al faltante y le acomoda en ROJO lo del lado opuesto y viceversa.


Imágenes integradas 1
beyond compare.jpg

Fernando D. Bozzo

unread,
Dec 2, 2013, 6:30:15 PM12/2/13
to publice...@googlegroups.com
Hola Edgar:

Sí, lo conozco el programa, es de pago. Justamente con las versiones TEXTO de los binarios ahora podés compararlos de esa forma, tanto con ese programa como con otros mejores para hacer merge, como WinMerge, que además de mostrar las diferencias te permiten pasar cambios de un lado al otro.

Saludos!

Fernando D. Bozzo

unread,
Dec 2, 2013, 6:37:38 PM12/2/13
to publice...@googlegroups.com
Hoy es día de releases :-)

Adjunto la versión 1.7 de foxbin2prg con los siguientes cambios:

- Arreglo del bug reportado por Fidel sobre la desaparición de propiedades (al menos eso parece!)
- Agregado de una barra de progreso para cuando se procesan muchos archivos (por ejemplo indicando *.SCX)
- Agregado de mensaje de ayuda si se llama sin parámetros
- Verificación y logueo de archivos READONLY con debug activo
- En esta versión además se adjunta el archivo README.TXT y una carpeta CONFIG por si se quiere hacer un EXE, que para usar con herramientas SCM externas es más útil

Link de descarga:
https://drive.google.com/file/d/0B_qHXcWqGDY-anhWNUpYNk5xWGs/edit?usp=sharing

Nota: En la próxima versión seguramente venga el soporte para conversión de reportes (FRX)


Saludos!

Fidel Charny

unread,
Dec 2, 2013, 6:52:38 PM12/2/13
to publice...@googlegroups.com
Just Amazing! It's working very fine!!
La prueba realizada ahora con el form que tiene un pageframe y dos commandgroup sobre sendos page muestra que se recupera perfectamente. Todo aparece en su lugar. Excelente Fernando!!!. 

edgar suarez kummers

unread,
Dec 2, 2013, 7:08:52 PM12/2/13
to publice...@googlegroups.com
Estimado Quijote (Fernando):

Muestras un dominio total de la elaboración de tu programa ya que cada 24 horas nos ofreces una versión mejorada. Felicitaciones a Sancho (Fidel) tu fiel "arcabucero" que realiza las pruebas de las "armas".

Gracias por el dato del winmerge

Fer

unread,
Dec 2, 2013, 7:12:49 PM12/2/13
to publice...@googlegroups.com

Qué bueno, hoy duermo tranquilo :-P

Fidel Charny

unread,
Dec 2, 2013, 7:40:29 PM12/2/13
to publice...@googlegroups.com
Fernando:
He detectado un problema en la conversión de vcx:
El caso detectado es una clase commandgroup a la que le agregué una propiedad (objGrid). Esta definción no reaparece al regenerar la clase a partir del VC2.
En mi modesto parser aparece esto. <USER_PROPERTIES> no aparece en la versión reconstruida, lo cual indica que el campo está vacío.
Mañana si todavía no se me complica, buscaré otras propiedades definidas en otros objetos.
La definición distinta de <OBJETO_X> indica que el zorder es distinto, aunque por ahora no encuentro un problema con eso.

* Version del original
<OBJETO_80>
     <CLASS>commandgroup</CLASS>
     <USER_PROPERTIES>
          Thisform.Objgrid
     </USER_PROPERTIES>
     <BASECLASS>commandgroup</BASECLASS>
     <OBJNAME>thmovmin</OBJNAME>
     <METHODS>
          <PROCEDURE>
               PROCEDURE Click
               SELECT (This.objGrid.RecordSource )
               do case
                case this.value=1
                go top
                case this.value=2
                go bott
                case this.value=3
                IF !BOF()
                SKIP -1
                ENDIF
                case this.value=4
                IF !EOF()
                SKIP
                ENDIF
                case this.value=5
                This.ObjGrid.REfresh
               endcase
               This.ObjGrid.SetFocus
               ENDPROC
          </PROCEDURE

     </METHODS>
</OBJETO_80>

* Versión del reconstruido con Foxbin2prg

<OBJETO_124>
     <CLASS>commandgroup</CLASS>
     <BASECLASS>commandgroup</BASECLASS>
     <OBJNAME>thmovim</OBJNAME>
     <METHODS>
          <PROCEDURE>
               PROCEDURE Click
               SELECT (This.objGrid.RecordSource )
               do case
                case this.value=1
                go top
                case this.value=2
                go bott
                case this.value=3
                IF !BOF()
                SKIP -1
                ENDIF
                case this.value=4
                IF !EOF()
                SKIP
                ENDIF
                case this.value=5
                This.objGrid.REfresh
               endcase
               This.objGrid.SetFocus
               ENDPROC
          </PROCEDURE
 
     </METHODS>
</OBJETO_124>


Un abrazo
Fidel.
NEWCLASE.VC2

Fidel Charny

unread,
Dec 2, 2013, 7:44:50 PM12/2/13
to publice...@googlegroups.com
Perdón Fernando, la biblioteca se puede mostrar en el diseñador de clases sin que haya detectado problemas y además es operativa. Solo que al intentar instanciar un form que usa esa clase, me saltó que la propiedad objgrid no existe y la posición del error lo da para el objeto ThMovim (commandgroup) de la vcx newclase.
Además los commandgroup y los array aparecen normales, por lo menos hasta donde he visto.

Felices sueños.
Fidel (el pesado).

Fernando D. Bozzo

unread,
Dec 3, 2013, 6:51:06 AM12/3/13
to publice...@googlegroups.com
Buenos días:

Esta es la versión 1.8 de foxbin2prg (solo arreglo bugs) con los siguientes cambios:

- Aparentemente el arreglo en 1.7 del bug de propiedades que desaparecen no era correcto, y se soluciona ahora
- Encapsulación de sort para poder reutilizarlo en generación TEXT y BIN por separado
- Reproducido el problema que reportó Fidel con el commandgroup, y ya no detecto que siga ocurriendo

Fidel Charny

unread,
Dec 3, 2013, 9:26:42 AM12/3/13
to publice...@googlegroups.com
Fernando:
Como el problema de la desaparición de propiedades de usuario en objetos de clase continúa con la 1.8, investigué un poco y veo lo siguiente:
Aparentemente, esta propiedad debe figurar en el campo Reserved3 de la tabla vcx, además de estar en el campo Properties.
En el adjunto "Difiere.txt" intento mostrar el problema. 
En mi parser casero detecto la existencia de la propiedad de usuario, no por el listado de Properties, sino por Reserved3 y de ahí que aparece la diferencia. Fijate que los vc2 generados sobre el original y sobre el reconstruido son iguales.
Por las dudas, en el zip Change._ip están los archivos vcx/vct originales y _rec (foxbin2prg) y sus respectivos vc2 aunque no creo que los necesites.

De paso, viendo este bodrio newclase.vcx veo que todavía me quedan algunas chapuzas por resolver. Por suerte, todavía no aparece el famoso cartel ("Too many 'chapuzas' within de code!!. Just bullshit!!")

Un abrazo
Fidel.
difiere.txt
Change._ip

Fer

unread,
Dec 3, 2013, 11:00:20 AM12/3/13
to publice...@googlegroups.com

Gracias por tu ayuda Fidel. Voy a tener que mejorar los tests unitarios para comprobar estas cosas mejor :-(

Arturo Ramos

unread,
Dec 3, 2013, 9:39:46 PM12/3/13
to publice...@googlegroups.com
Hola Fernando,

Probaré lo que mandas, muchas gracias, yo hace un tiempo estuve trabajando en esto mismo, te paso la liga de referencia

Igual de algo puede ayudarte en lo que haces.

Estaré pendiente de lo que haces y probando.

Saludos.

Arturo Ramos
Cancún, México.

Fer

unread,
Dec 4, 2013, 1:26:36 AM12/4/13
to publice...@googlegroups.com

Muchas gracias Arturo por tu ayuda.
Actualmente estoy haciendo un amplio juego de pruebas automatizadas con FoxUnit, ya que Fidel detectó un fallo que se repite e intento dar con él, y de paso para tener pruebas de regresión.

Saludos! ;-)

Fidel Charny

unread,
Dec 4, 2013, 8:06:07 AM12/4/13
to publice...@googlegroups.com
Fernando:
Examinando otra clase (thCalc) que tiene 5 forms, un par de containers y una custom, me encuentro con que en dos de los forms (frmzcalcu y frmzcalcu2), aparecen todas las propiedades (Los campos reserved1, reserved2 y reserved3 están como en el original).
Hay dos formularios (telchain y telimpor) que tienen una propiedad de usuario "Vericuit" que no reaparece. El otro (frmcons) no tiene propiedades de usuario definidas en el diseño.
La clase se puede editar sin problemas.
Te envío un zip adjunto con la clase (original y regenerada), el vc2 y los parser míos donde la diferencia está en la falta de las tag <USER_PROPERTIES> (que responden a Reserved3).
Por lo que veo, estas propiedades se crean a partir de Reserved3 y toman un valor determinado en Properties.

Muchas gracias
Fidel.
ThCalc._ip

Fer

unread,
Dec 4, 2013, 11:12:16 AM12/4/13
to publice...@googlegroups.com

Gracias Fidel, en cuanto llegue a casa reviso esto a ver si puedo reproducirlo y así agrego el caso de prueba a los tests automatizados que estoy haciendo.

Fer

unread,
Dec 5, 2013, 1:54:39 AM12/5/13
to publice...@googlegroups.com

Estoy creando los casos de prueba con FoxUnit, pero para este desarrollo lleva bastante tiempo hacerlos.
Espero poder terminarlos para esta noche o como mucho para mañana, así puedo comprobar las incidencias que me reportaron.

Fidel Charny

unread,
Dec 5, 2013, 8:50:49 AM12/5/13
to publice...@googlegroups.com
Estimado Fernando
Te agrego un par de comentarios
1) En las custom class que he visto, las propiedades de usuario se definen correctamente
2) En algunos casos (he visto 1 clase label, 1 clase checkbox, 1 optiongroup) Reserved3 aparece con 3 espacios en blanco en todos los casos, mientras que  Reserved1="Class" y Reserved2=1. Ninguna de estas clases tienen propiedades de usuario.

En el adjunto te envío dos tablas en las que se compara la situación para todos los objetos que tienen propiedades de usuario en original y en el generado por FoxBin2prg. Las tablas tienen 2 campos memo (original y Foxbin2) que deberían ser iguales. En cada registro va el nombre del objeto y su baseclass.

Un abrazo
Fidel.
UserProp._ip

Fernando D. Bozzo

unread,
Dec 6, 2013, 1:41:42 PM12/6/13
to publice...@googlegroups.com
Buenas tardes:

¡Al fin!, puedo sacar una versión v1.9 que estuve puliendo estos días agregando varios casos de prueba dinámicos con FoxUnit.

En esta entrega los cambios son:
- Correcciones de bugs
- Ajustes en diferencias que había en algunos campos memo
- Agregado de la parte que faltaba del proyecto, para quien lo quiera completo (FoxUnit y los casos de prueba generados)
- No hay nuevas funcionalidades todavía, pero ya vienen! ;-)

Nota para los interesados en el testing automatizado:
Para quien quiera conocer FoxUnit, esta es una buena ocasión, ya que lo incluyo (con alguas mejoras) en el zip del proyecto.
Se debe descomprimir todo respetando los directorios y configurar el path para incluir "foxunit" y "tests" en el mismo.
Las pruebas se ejecutan desde la raíz del programa, no desde la carpeta de tests, con DO FXU

Link de descarga
https://drive.google.com/file/d/0B_qHXcWqGDY-S2NqTWJ2SEJEN3c/edit?usp=sharing

PD1: Quiero agradecer a quienes están ayudando con esto.
PD2: Fidel, probé los casos que me mandaste y parece que van bien

Saludos!

Fidel Charny

unread,
Dec 6, 2013, 3:27:22 PM12/6/13
to publice...@googlegroups.com
Estimado Fernando.
Antes que nada, muchas gracias por tu preocupación.
Te comento que subsisten algunas cuestiones por resolver.
Te envío en adjunto información:
1) NewClase.dbf / fpt / cdx. Tabla de comparación de todos los objetos
2) Archivo de texto Newclase_dif.txt compara diferencias en las distintas estructuras
3) Los archivos vcx / vct de la clase original y reconstruida (new) y el vc2 correspondiente.
Uno de los temas que veo es que en algunos event faltan los comandos y éstos aparecen luego en otro lugar.

Tal vez puedas entender este bodrio del archivo newclase_dif.txt. Los problemas se marcan así:
<DIFER:ORI_BIN|C|=Existe en Original * No existe en FoxBin2prg/>
<DIFER:BIN_ORI|C|=Existe en FoxBin2prg * No existe en original/>

Me queda el análisis de métodos de usuario, aunque me parece que es correcto, pero yo tengo una falla en mi parser que tengo que revisar. Por lo que te digo, no le prestes atención por el momento a las etiquetas METHODS, USER_PROCEDURE o USER_METHODS, pues contienen información incorrecta. Aparecen diferencias que en realidad no existen.

Un abrazo
Fidel.
foxbin19._ip

Fernando D. Bozzo

unread,
Dec 6, 2013, 4:47:08 PM12/6/13
to publice...@googlegroups.com
Hola Fidel:

¿Falta algún método? Porque el ensamblado los guarda ordenados, y no en el orden original, por lo que seróa normal que nunca los guarde en el mismo irden. Lo único importante es que no falten propiedades ni métodos.

Voy a revisar lo que me mandás a ver si falta algo, pero si abrís las clases o forms no se abren o les falta algo?

Gracias!

Fernando D. Bozzo

unread,
Dec 6, 2013, 5:10:34 PM12/6/13
to publice...@googlegroups.com
Lo acabo de mirar y no veo nada raro. Las clases se abren y tienen el código.

  Tenés que tener en cuenta algo importante, que tal vez no expliqué al principio, pero que es importante: Como parte del funcionamiento se basa en las cosas buenas que tiene el SCCTEXT, una de esas cosas es el ordenamiento alfabético de métodos y objetos, para que las comparaciones se puedan hacer de forma más fácil.

  Eso significa que al ensamblar nuevamente los binarios, lo más probable es que no coincidan los memos ensamblados (con los métodos reordenados) con los memos originales, y con las propiedades pasa lo mismo.

Lo único que conserva su orden original son los objetos ensablados, ya que de acuerdo al orden en que se cargan se muestran en pantalla y afecta a su orden Z, y por eso guardo este dato, pero el resto lo único que tendrá de igual es la lista de métodos/propiedades/eventos (Reserved3, Properties, Protected) y el contenido de los métodos (Methods), aunque ordenados alfabéticamente, ya que ello no afecta a su funcionamiento.

Si encontrás algún dato o método que no esté vinculado al objeto o clase original, eso sí sería un bug, aunque eso es lo que estuve verificando estos días y por el momento no encontré ningún caso descontrolado.

Gracias Fidel!



El viernes, 6 de diciembre de 2013 21:27:22 UTC+1, Fidel Charny escribió:

Fidel Charny

unread,
Dec 6, 2013, 5:43:34 PM12/6/13
to publice...@googlegroups.com
Fernando:
Mientras reviso mi procedimiento de revisión (o sea), te envío un ejemplo en el adjunto. La imagen de arriba es del original y la de abajo es del reconstruido. Este código que sobra en el nuevo, pertenece a otros dos objetos. Uno de ellos, un commandgroup llamado ThMovim tiene ese código en GotFocus y LostFocus de sus botones, en la versión reconstruida tiene unos espacios raros. No está en Default, pero no tiene el código. El otro objeto que también es commandgroup y se llama "Ficha" no tiene código ni en GotFocus, LostFocus y Click, donde en el original si tienen.
Hay otros ejemplos, pero dame un rato para intentar pulir la información.

Fidel.
cnwAprox_Aproxim.jpg

edgar suarez kummers

unread,
Dec 6, 2013, 6:01:02 PM12/6/13
to publice...@googlegroups.com
Buenas Fernando y Fidel:

No me cansaré de felicitar y agradecer al creador (Fernando) y al escudero (Fidel) por ese aporte tan útil y oportuno que hacen a la comunidad esta de Visual FoxPro.

Alguna vez hace ya muchos años que hice software de Contabilidad y para probarlo (si hacía las cosas bien), hice además software que dictara las imputaciones ficticias y por miles. Se generaban las fechas, los nombres y las cuantías todas en forma RANDOM.

El método que están utilizando Ustedes dos llevará a la aplicación a ser infalible.

En mi caso los niveles de imputación era veintidos, o sea la máxima profundidad a la que se podían agrupar los datos imputados.

Es claro que se trata de épocas diferentes y no comparables los problemas encontrados.

De nuevo aplausos por su creación.

Saludos




Fidel Charny

unread,
Dec 6, 2013, 6:26:05 PM12/6/13
to publice...@googlegroups.com
Fernando:
He revisado y corregido un par de bugs en el parser y en el armado de la revisión de clases y como resultado de la misma, aparecen los resultados del adjunto. 
En resumen:
En dos textbox de la clase, aparece un código que pertenece a tres commandgroup de la clase. En los commandgroup, Eventos GotFocus, LostFocus y Click, no aparece el código correspondiente.
Todo esto para la clase revisada (Newclase.vcx).
Ahora que el analizador funciona mejor, veo ThCalc y alguna otra y luego te comento.

Muchas gracias.
Fidel
NEWCLASE_dif.txt

Fernando D. Bozzo

unread,
Dec 6, 2013, 6:30:55 PM12/6/13
to publice...@googlegroups.com
Ok. Yo estoy comparando el newclase.VC2 que me mandaste antes con la clase en sí para ver porqué se puede estar mezclando.

Gracias!

Fidel Charny

unread,
Dec 6, 2013, 6:36:49 PM12/6/13
to publice...@googlegroups.com
Aleluya!!! Thcalc se reconstruyó perfectamente. El parser no dió ninguna diferencia y, además, funciona!!!!
Vamos Fernando Todavía!!!!!

Un abrazo
Fidel
ThCalc_foxbin2.jpg

Fernando D. Bozzo

unread,
Dec 6, 2013, 7:04:39 PM12/6/13
to publice...@googlegroups.com
Gracias :-)

Sigo mirando el problema con NEWCLASE. Voy a cazar ese bug cueste lo que cueste.

Fidel Charny

unread,
Dec 6, 2013, 7:11:32 PM12/6/13
to publice...@googlegroups.com
Estimado Fernando:
De las librerías examinadas, surge un problema similar en la mzgrid que adjunto. En este caso, el problema se presenta en un CommandButton, pero está relacionado con GotFocus y LostFocus.

En las otras vistas (rayas, mzmanak, thmoves, gmultiva, gmultiper, gmsoldi y thcalc), el analizador da cero problemas. Probé solamente thcalc, pero no veo motivos para que no funcionen todas (hiper confianza en mi parser).

Mañana repasaré formularios, aunque creo que esto ya andaba ok.
Bueno, justo entra otro post tuyo. No tengo dudas que será solucionado. 

Ya me voy.
Un abrazo
Fidel.
mzgrid._ip

Fernando D. Bozzo

unread,
Dec 6, 2013, 7:21:02 PM12/6/13
to publice...@googlegroups.com
Fidel, creo que lo tengo. Voy a hacer algunas pruebas y a intentar reproducir el problema a propósito para poder crear un nuevo caso de prueba, pero parece que en algunos casos el último objeto "PROCEDURE" de la clase anterior (en este caso cnwaprox) se queda abierto (sin limpiar) y es reutilizado en la clase siguiente, y por eso se le agregan todos los métodos de la siguiente clase en el último PROCEDURE de la anterior.



Fidel Charny

unread,
Dec 7, 2013, 6:55:46 AM12/7/13
to publice...@googlegroups.com
"En un lugar de La Mancha, de cuyo nombre no quiero acordarme, no ha mucho tiempo que vivía un hidalgo de los de lanzan en astillero, adarga antigua, rocín flaco y galgo corredor."
...
"La ventura va guiando nuestras cosas mejor de lo que acertáramos a desear; porque es allí, amigo Sancho Panza, donde se descubren treinta o pocos más, desaforados gigantes con quien pienso hacer batalla..."

Gracias Edgar por recordarme esta maravillosa obra.

Fidel Charny

unread,
Dec 7, 2013, 9:50:10 AM12/7/13
to publice...@googlegroups.com
Fernando:
Todo bien, pero fijate el mensaje que me aparece ahora ???
fdb_mess.jpg

Fidel Charny

unread,
Dec 7, 2013, 9:57:29 AM12/7/13
to publice...@googlegroups.com
Fernando
En realidad quería comentarte que estuve analizando una gran cantidad de formularios y no salta ningún problema. Igualmente con el resto de las clases para las que corrí el test. No aparece ninguna diferencia. Es fantástico!!

Un abrazo
Fidel.

edgar suarez kummers

unread,
Dec 7, 2013, 10:18:50 AM12/7/13
to publice...@googlegroups.com
Buenas Fidel:

ja,ja,ja CHAPUZA es un término muy Madrileño, y el código de Fernando es exactamente lo contrario a una CHAPUZA, es en cambio soberbio y de una utilidad muy alta.

Tengo entendido que Ustedes dos son de la misma tierra del representante de "Dios en la Tierra".

Una pregunta:

Estuve tratando de "download" la calculadora de Theodore, pero apenas he conseguido una versión llamada "THcalc.widget".

A propósito, ¿ cómo se abren estos archivos widget ? 

Saludos y felicitaciones de nuevo

Fidel Charny

unread,
Dec 7, 2013, 10:34:17 AM12/7/13
to publice...@googlegroups.com
Edgar: el código analizado corresponde a algunas clases de mi propiedad. Así que yo soy el dueño de la chapuza y la queja de de Don Fernando por tener que soportar mis tonterías.
La Calculadora de Theodore?. Ah, pero lo que se ve ahí es una imagen. La clase es la ThCalc.scx

Fidel Charny

unread,
Dec 7, 2013, 10:39:54 AM12/7/13
to publice...@googlegroups.com
Estimado Fernando:
Este código
IF _VFP.STARTMODE > 0
QUIT
ENDIF
RETURN lnResp
hace que la versión en ejecutable de mi analizador (que incluye foxbin2prg.prg) se piante. Comentando la línea todo funciona bárbaro. Ahora, bien, puede que tu no quieras que se use en un ejecutable (je, je).

Fidel.

Fernando D. Bozzo

unread,
Dec 7, 2013, 10:59:17 AM12/7/13
to publice...@googlegroups.com
Bueno, al fin encontrado el bug de "los métodos movidos", así que en esta nueva versión 1.10 hay:

- Arreglo del bug del método movido y de los espacios que se pierden por el TEXT/ENDTEXT
- Nuevos casos de prueba FoxUnit para comprobar la solución (UT)
- Arreglo definitivo del ENDPROC sobrante por tener un ENTER demás luego del ENDPROC
- Nuevo test FoxUnit de bloques de exclusión

Link de descarga:
https://drive.google.com/file/d/0B_qHXcWqGDY-YWdrUlZqU1V4N2M/edit?usp=sharing

PD: Fidel, me ayudaron mucho tus ejemplos de código. Gracias!

Saludos!

Fernando D. Bozzo

unread,
Dec 7, 2013, 11:00:15 AM12/7/13
to publice...@googlegroups.com
Muy bueno XD

Fernando D. Bozzo

unread,
Dec 7, 2013, 11:25:14 AM12/7/13
to publice...@googlegroups.com
Hola Fidel:

Ese código es para lo siguiente:
- Si el programa se usa desde la línea de comandos con DO foxbin2prg.prg, entonces al terminar usa RETURN así no te cierra la sesión de desarrollo
- Pero si se usa el EXE (compilando uno, claro), entonces usa QUIT para terminar.

Esta es una costumbre que tengo para que no me queden formularios abiertos cuando ejecuto desde un EXE, ya que con RETURN no termina FoxPro, en cambio en modo desarrollo me aseguro de seguir en la sesión de trabajo.

Un abrazo!

PD: Ya estoy trabajando en la v1.11 con soporte inicial para reportes (FRX/FR2)

Carlos Miguel FARIAS

unread,
Dec 7, 2013, 12:34:48 PM12/7/13
to Grupo Fox

no estoy de acuerdo con la nueva versión. debería ser b1.2
(:<{)

Fernando D. Bozzo

unread,
Dec 7, 2013, 12:46:53 PM12/7/13
to publice...@googlegroups.com
Hola Miguel:

Tenés razón, cuando comencé el desarrollo me equivoqué con el versionado al no poner "beta" o incluso "alfa", pero una vez publicado tuve que seguir con esta numeración. Igualmente puse claramente que está en desarrollo.

¿Pudiste hacer alguna prueba? Vendría bien tu ayuda y la de los demás.

Saludos.-

edgar suarez kummers

unread,
Dec 7, 2013, 1:19:36 PM12/7/13
to publice...@googlegroups.com
Buenas Fernando:

A ver, conoces de seguro BLOWFISK.VCX

Es una maravillosa clase para encriptar:

He usado con mucho éxito esta clase y los siguientes textos dentro de los programas para encriptar:

Set Default To (JustPath(Sys(16)))
clear
LOCAL lcCadenaA as string, lcCadenaB as String
SET CLASSLIB TO "blowfish.vcx"
o=CREATEOBJECT('blowfish.blowfish')

lcCadenaA=o.Codificar('K13LTHMG')
? lcCadenaA
? o.Decodificar(lcCadenaA)

lcCadenaA=o.CodificarSimple('K13LTHMG','K13LTHMG') 
? lcCadenaA 
? o.DecodificarSimple(lcCadenaA,'K13LTHMG')

lcCadenaA=o.CodificarBlowfish('K13LTHMG','K13LTHMG') 
? lcCadenaA
?o.DecodificarBlowfish(lcCadenaA,'K13LTHMG')

A partir de tu última versión de hoy, fechada de ayer, la v10:

He hecho este programa pequeño, lo he llamado dbozzo.prg:

Set Default To (JustPath(Sys(16)))
DO foxbin2prg.prg WITH "c:\ellektor\blowfish.vcx"

Y me produce al correrlo lo siguiente:

Error 1098, Procedimiento sin cerrar. La última línea de código debe ser ENDPROC. [PROCEDURE blosfishconstantes]
indentarmemo, 5161
ERROR 'Procedimiento sin cerrar. La última línea de código debe ser ENDPROC. [' + laLineas(1) + ']'

Fuente: C:\ELLEKTOR\BLOWFISH.VCX

En un archivo llamado "blowfish.vcx.err"



edgar suarez kummers

unread,
Dec 7, 2013, 1:23:20 PM12/7/13
to publice...@googlegroups.com
Donde dice "donde dice" debe decir "debe decir"

O sea en vez de BLOWFISK debe leerse BLOWFISH 

Disculpen pero tengo OJITIS ...

It is loading more messages.
0 new messages