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

493 views
Skip to first unread message

Fernando D. Bozzo

unread,
Dec 8, 2013, 8:18:58 AM12/8/13
to publice...@googlegroups.com
[Reposteo en nuevo hilo porque algunos tienen problemas para ver el hilo original]

Hola a tod@s:

Tengo la alegría de publicar le versión foxbin2prg v1.12 con soporte inicial de Reportes y Etiquetas, lo que significa que el soporte de conversiones actualmente abarca: Clases, Forms, Reportes y Etiquetas, quedando todavía las estructuras de los DBF, CDX y DBC

En esta release:
- Agregado soporte bidireccional de conversión de Reportes (FRX/FR2) y Etiquetas (LBX/LB2)
- Optimización y refactorización de algunos métodos
- Nuevos casos de prueba con FoxUnit para comprobar el ensamblado de Reportes y Etiquetas

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

PD: Agradecería pruebas con esta nueva conversión, ya que solo dispongo de reportes y etiquetas muy básicos porque nunca los he necesitado y requiere de más casos de prueba.
Cualquier problema, por favor, adjuntarme el reporte o etiqueta original.

Gracias!


-------------------------------------------------------------------------------------------------------------------------------------------------------------
El viernes, 22 de noviembre de 2013 01:44:42 UTC+1, 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).

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!

edgar suarez kummers

unread,
Dec 8, 2013, 9:02:59 AM12/8/13
to publice...@googlegroups.com
Adjunto la prueba Reina del "Blowfish.vc2"

"foxbin2prg.prg" permitió que cambiara mi versión de blowfish.vcx/vct por aquella que sí procesó bien.

Aclaro que no todas las versiones de BLOWFISH son iguales, tienen una diferencia en los primeros bytes detectada por BEYOND COMPARE, pero esto fue gracias al programa de Fernando Dbozzo que lo he detectado.

Gracias de nuevo

Saludos



BLOWFISH.VC2

Fidel Charny

unread,
Dec 8, 2013, 9:28:43 AM12/8/13
to publice...@googlegroups.com
Fernando:
Al intentar ejecutar foxbin2prg v1.12 sobre un report (que no sé de que trata, je, je), no termina el proceso por este error:

Error 1924, TOREG is not an object.
write_detalle_reporte, 6011
<<C_TAB>>platform="WINDOWS " uniqueid="<<EVL(toReg.UniqueID,SYS(2015))>>" timestamp="<<toReg.TimeStamp>>" objtype="<<toReg.ObjType>>" <<>>



Fuente: C:\THFOXBIN\SAMPLE\REPSAM1.FRX

Muchas gracias
Fidel.

edgar suarez kummers

unread,
Dec 8, 2013, 9:32:41 AM12/8/13
to publice...@googlegroups.com
faltará algo como

DO FORM miforma.scx

o sea he recibido ese mensaje de error cuando se escribe ...

DO miforma.scx

en vez de lo correcto ...

DO FORM miforma.scx

Corto y fuera, no quiero ser sapo, esto tiene dueño y doliente que es Fernando ....

Saludos





Fidel Charny

unread,
Dec 8, 2013, 9:52:15 AM12/8/13
to publice...@googlegroups.com
Edgar:
Si te fijas bien, se tratade un frx. El error lo reporta Foxbin2prg (try Catch) y debe corresponder a la linea donde se llama a Toreg.timestamp o ToReg.ObjType, por ejemplo (sin que tenga que ser ese el error):

PROCEDURE write_CABECERA_REPORTE
lparameters toreg
* más código
TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
<<C_TAB>>platform="WINDOWS " uniqueid="<<EVL(toReg.UniqueID,SYS(2015))>>" timestamp="<<toReg.TimeStamp>>" objtype="<<toReg.ObjType>>" <<>>
ENDTEXT
* sigue el código
Un llamado (también de ejemplo): THIS.write_CABECERA_REPORTE( @loRegCab )

Fernando D. Bozzo

unread,
Dec 8, 2013, 10:00:48 AM12/8/13
to publice...@googlegroups.com
Gracias Fidel! Bug corregido.

Esta es la versión foxbin2prg v1.13 con este arreglo:
- Se produce "Error 1924, TOREG is not an object" cuando se intenta convertir un reporte o etiqueta que no tiene tablas en su dataenvironment


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

edgar suarez kummers

unread,
Dec 8, 2013, 10:02:14 AM12/8/13
to publice...@googlegroups.com
Estimado Fidel:

Gracias por la información, repito que no quiero ser sapo, por acá en Colombia decimos sapo a quien se mete donde no lo han llamado, sé que Fernando y tú se entienden de maravilla en esto del programa foxbin2prg.prg

Yo me he beneficiado mucho de este programa "foxbin2prg.prg", ya que logré buscar y colocar la versión correcta del BLOWFISH.VCX/VCT

Saludos y gracias además de felicitarlos de nuevo por su gran aporte. 


Fidel Charny

unread,
Dec 8, 2013, 10:58:41 AM12/8/13
to publice...@googlegroups.com
Estimado Fernando:
Aunque encuentro alguna dificultad para analizar los reports (por mi ignorancia al respecto), te comento lo siguiente:
1) Adjunto uno analizado (vino con alguna de las versiones de foxbin2) junto con el informe en REPSAM1_dif.txt
2) En la medida en que puedo basarme en los UniqueId, la coincidencia me parece total, salvo mejor ojo.
3) No veo, tal vez me puedas orientar, cómo manejar los registros que no tienen UniqueId. En estos, el análisis que hago yo marca diferencias, pero no pueden tomarse en cuenta porque no caigo en cómo hacer coincidir los registros. O sea, no se mantiene el orden original y no veo de qué puedo agarrarme. 
4) Verás que los tamaños generados son exactos.
5) Como recién arranco con esto, tengo una ensalada de binario y texto. Con lo del binario no tengo una metodología, miré un poco los chirimbolos y los espacios, que parecen todos respetados. 
6) El reporte reconstruido se puede acceder igual que el original. No tengo nada para probar la funcionalidad.

Bueno, perdón por la chapuza y el aire de improvisación que raya en el crudo empirismo. Pero es Domingo y me tomo un descanso.

Muchas gracias
Un abrazo!
Fidel
Reports._ip

Fidel Charny

unread,
Dec 8, 2013, 11:08:38 AM12/8/13
to publice...@googlegroups.com
Estimado Edgar
Acá en Argentina (y en el sur de Santa Fe), decimos "sapo de otro charco". Pero fijate que, en todo caso, seremos sapos del mismo charco, al menos de esta comunidad.
Esta creación de Fernando viene a concretar algún sueño que he tenido y a pesar de estudiar algunas cosas, nunca pude ni empezar a codificar, debido a mis limitaciones. Siempre digo que no soy programador, apenas un diseñador de aplicaciones. Entonces, además de crearme un gran entusiasmo por la idea, me da la oportunidad de escrudiñar como programa alguien que sabe. Y machacando con algún ejemplo quizá se me corran las telarañas y pueda aparecer algo más o menos sensato.
Por el momento, me conformo con esta sacudida a las neuronas.
Me voy a "dominguear" como dice don José Larralde.

Un abrazo
Fidel

Fernando D. Bozzo

unread,
Dec 8, 2013, 11:36:40 AM12/8/13
to publice...@googlegroups.com
Hola Fidel, contesto sobre tu correo.



El domingo, 8 de diciembre de 2013 16:58:41 UTC+1, Fidel Charny escribió:
Estimado Fernando:
Aunque encuentro alguna dificultad para analizar los reports (por mi ignorancia al respecto), te comento lo siguiente:
1) Adjunto uno analizado (vino con alguna de las versiones de foxbin2) junto con el informe en REPSAM1_dif.txt

2) En la medida en que puedo basarme en los UniqueId, la coincidencia me parece total, salvo mejor ojo.
 
3) No veo, tal vez me puedas orientar, cómo manejar los registros que no tienen UniqueId. En estos, el análisis que hago yo marca diferencias, pero no pueden tomarse en cuenta porque no caigo en cómo hacer coincidir los registros. O sea, no se mantiene el orden original y no veo de qué puedo agarrarme. 

Eso es fácil: Se abre el reporte original como tabla y se hace esto:

REPLACE ALL UNIQUEID WITH SYS(2015) FOR EMPTY(UNIQUEID)

De hecho eso es lo que hice con el reporte incluido en el directorio de TESTS\DATOS_READONLY

 
4) Verás que los tamaños generados son exactos.
 
5) Como recién arranco con esto, tengo una ensalada de binario y texto. Con lo del binario no tengo una metodología, miré un poco los chirimbolos y los espacios, que parecen todos respetados. 

Esta comprobación la hago en uno de los tests de FoxUnit que adjunté en la carpeta TESTS (se ejecuta con DO FXU para ver los tests)
Hago una comprobación del archivo generado (en DATOS_TEST) contra el original (en DATOS_READONLY) campo a campo y fila a fila, ubicándolas por el ID, que ya dejé previamente asignado para poder comparar.
Cuando se ejecutan los tests de FoxUnit, se hace una copia del archivo a testear de READONLY a TEST y ahí se hace la doble conversión para luego poder comparar TEST contra el original de READONLY

Estos tests me ahorraron muchísimas horas de pruebas manuales, ya que comprobar campo a campo y fila a fila manualmente puede llevar horas, y con los tests automatizados de FoxUnit se programa y se ejecuta en un segundo o menos.

 
6) El reporte reconstruido se puede acceder igual que el original. No tengo nada para probar la funcionalidad.

Lo comentado antes.

 
Bueno, perdón por la chapuza y el aire de improvisación que raya en el crudo empirismo. Pero es Domingo y me tomo un descanso.

No pasa nada, sos de mucha ayuda igualmente.

Gracias!


 

Fidel Charny

unread,
Dec 13, 2013, 10:48:00 AM12/13/13
to publice...@googlegroups.com
Hola Fernando
Estoy trabajando en el respaldo de proyectos con foxbin2prg. Parto de la tabla pjx y busco todos los contenidos, generando en la carpeta de destino una estructura de carpetas como la del proyecto respectivo. Y ahí van a parar los SC2, VC2, PJ2 y FR2 (que no tengo).
A los INLIST(TYPE,"I","x","T","P") los copio al destino de back. 
Con los archivos de menú, copio los mpr y además genero un archivo de información a partir de los mnx.
Tenés pensado incluir los mnx en foxbin2prg?. 

Un abrazo
Fidel

Fer

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

Hola Fidel! Ya te estaba extrañando :-)
Sí, tengo pensado incluir cuanto binario pueda descodificar :-)

Actualmente estoy con los DBFs y DBCs, el dbf ya lo tengo, pero quiero terminar el dbc así libero los dos juntos. En este caso solo guardo la estructura como para poder reconstruirla, con índices, referencia de integridad, etc. Me costó un poco descodificar el memo del Dbc, pero ya casi lo termino.

Un abrazo!

Arturo Ramos

unread,
Dec 13, 2013, 9:35:24 PM12/13/13
to publice...@googlegroups.com
hola Fernando,

Hay algo que me pasa desde la primera versión que probé, ahora actualicé a esta última que mandas y me pasa lo mismo,

Tengo un formulario con AutoCenter = .T.

Al crear .SC2 la propiedad está correcta, al regenerar .SCX veo la propiedad en .T. pero el formulario NO se abre centrado, si cambio la propiedad a .F. y la regreso a .T. ahora si se abre centrado.

Saludos.

Arturo Ramos
Cancún, México

Fer

unread,
Dec 14, 2013, 4:32:45 AM12/14/13
to publice...@googlegroups.com

Hola Arturo, gracias por el dato, lo voy a investigar.

Saludos!

Fidel Charny

unread,
Dec 14, 2013, 10:46:33 AM12/14/13
to publice...@googlegroups.com
Estimado Fernando:
Te comento que desde la última versión se genera un problema que no había advertido: la reconstrucción de los form omite la última línea del registro (PLATFORM="COMMENT", UNIQUEID="RESERVED"), con lo cual no se puede abrir el archivo.
Si le agregas la última linea copiando del original (scatter MEMO gather MEMO) funciona.

En cuanto al comentario de Alejandro, si antepones Docreate=.T. a Autocenter=.t., vuelve a la normalidad. Tal vez tengas que rever el tema del ordenamiento de la matriz. Esto lo deduzco de la creación de un form con autocenter. Ahí, curiosamente, el Autocenter = .T. aparece después del docreate = .t.. Será verdura el apio?

Un abrazo
Fidel.

Fer

unread,
Dec 14, 2013, 1:20:14 PM12/14/13
to publice...@googlegroups.com

Gracias por la observación Fidel, lo voy a modificar en la regeneración. Igualmente los vc2 y sc2 no se ven afectados, ya que la modificación es al usar el sc2 para regenerar el scx.

Fidel Charny

unread,
Dec 15, 2013, 9:41:50 AM12/15/13
to publice...@googlegroups.com
Estimado Fernando
Como yo estaba detectando solamente los registros PLATFORM=="WINDOWS", mi proceso de control no detectaba el tema de los registros "COMMENT". Estos deben haber salido bien hasta algún momento, porque los form se podían editar sin problemas. Ahora salta un cartel que dice:
"No records are found for the current platform"
En realidad le falta el último registro "COMMENT" con UniqueId="RESERVED"
Agregué esto a mi procedimiento de control y ahora muestra un error de generación (adjunto). Lo demás está todo ok.

Apostilla:
Fijate si podés poner la información de versiones en una tag (comentada). Algo así:
*<LASTVERSION=08/12/2013 FDBOZZO v1.13 Arreglo bug "Error 1924, TOREG is not an object"/>
Yo venía verificando por programa buscando "FDBOZZO      V", pero en algún caso aparece corrido y me falla la chapuza!!!. Entonces en el informe adjunto parece que estoy usando la 1.11, cuando en realidad es la 1.13, porque la información sobre 1.12 está desplazada.

Muchas gracias
Fidel.
FORMCLI_dif.txt

Fidel Charny

unread,
Dec 15, 2013, 9:46:43 AM12/15/13
to publice...@googlegroups.com
Fernando
(Otra vez sopa!!!)
Me olvidé de comentare que no aparece ningún problema con las vcx generadas por vc2.

Un abrazo.
Fidel.

Fernando D. Bozzo

unread,
Dec 15, 2013, 4:43:14 PM12/15/13
to publice...@googlegroups.com
Buenas noches:

Esta es la release v1.14 de mantenimiento (corrección de bugs):
- Arreglo bug AutoCenter al regenerar el form (SCX)
- Arreglo último registro COMMENT al regenerar el form (SCX)
- Optimización rutina de backup
- Los SC2, VC2, PJ2 existentes no son afectados por los cambios, solo se arreglan los binarios regenerados.

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

Saludos.-

PD: Gracias Arturo y Fidel por los reportes e ideas.

edgar suarez kummers

unread,
Dec 15, 2013, 5:22:53 PM12/15/13
to publice...@googlegroups.com
De nuevo felicitaciones Fernando, además hacerte una pregunta:

¿ Por qué incluyes un EXE en vez de una APP. ?

Saludos agradecido


Fernando D. Bozzo

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

El EXE es para poder usarlo como programa externo desde cualquier herramienta SCM (Control de Código Fuente) o desde la ventana de comandos o archivos batch, que no saben lo que es un PRG.
El PRG es para ser llamado desde la ventana de comandos de Fox

Son el mismo programa en distinto sabor :-)

Saludos.-

edgar suarez kummers

unread,
Dec 15, 2013, 6:31:19 PM12/15/13
to publice...@googlegroups.com
Buenas Fernando, te hice la pregunta por lo siguiente:

El APP se puede incluir en las aplicaciones que se distribuyen y que en mi caso utilizo un software que considero muy bueno, pero que solo le apunta a un ejecutable.

Considero tan bueno tu PRG que lo he incorporado a la aplicación que estoy desarrollando, aunque no le otorgo uso al usuario, pero sé que allí está guardado atesorado.

De cualquier forma gracias por la explicación.


Fer

unread,
Dec 15, 2013, 6:37:12 PM12/15/13
to publice...@googlegroups.com

Edgar, el exe lo podés usar igual que el app, aunque es un poco más rápido el exe, pero si igual necesitás el app, simplemente lo generás con el pjx incluido y listo, si lo único que tiene el exe es la inclusión del Config.fpw con screen= off y resource= off :-)

Fidel Charny

unread,
Dec 16, 2013, 4:53:08 PM12/16/13
to publice...@googlegroups.com
Fernando:
Con la versión 1.14 de Foxbin2prg se genera el registro final del SCX  a partir de SC2, con lo cual el formulario generado se puede editar.
Sin embargo, hay algunos datos que quedan omitidos y no sé si tienen algún significado o importancia. No alcanzo a descifrar a qué apuntan.

Sobre el archivo adjunto Formcli_dif.txt
En"<PROPERTIES|C|=..."  he reemplazado el Chr(10) por un Chr(28), nada más para evitar que se seccione el texto. Por eso en la secuencia de caracteres (<PROPERTIES_TrueChar|C|=) aparece 10 donde en el texto hay un Chr(28).

Properties es el campo que aparece vacío para el registro de PLATFORM="COMMENT" AND UNIQUEID="RESERVED"

Sobre el adjunto Version.txt
Ahora, cada vez que reemplace la versión de Foxbin2prg en mi proyecto, correré un parche que dejará las líneas de información de versión como aparecen en este adjunto, partiendo de las palabras claves "FDBOZZO" y la primer "v" después de la primer clave. También para mi proyecto, como trabaja como un prg incluido, el parche comenta el comando QUIT. Esto lo hago copiando en bajo nivel línea por línea, con excepción de las líneas de informe de versión y la de Quit que son reemplazadas. Luego el archivo generado se copia al emplazamiento (\PROGS) y se compila.
Escribí un método para detectar en foxbin2prg la última versión y eso se incorpora a las líneas de informe, como aparece en los adjuntos.

Muchas gracias
Un abrazo
Fidel.
FORMCLI_dif.txt
Version.txt

Fernando D. Bozzo

unread,
Dec 16, 2013, 6:20:32 PM12/16/13
to publice...@googlegroups.com
Hola Fidel, te comento sobre tus dudas:

- Timestamp: Por cómo se guardan los valores (diseño del FoxTeam), lamentablemente hay un pérdida máxima de 30 segundos que ocurre cuando los segundos son >= 32. No es una gran pérdida realmente, pero es una diferencia insalvable que puede haber en el 50% de los casos.

- Properties en último registro COMMENT: Según lo que observé hasta ahora, los datos de fuentes (Arial, etc) que se guardan en ese último registro no se usan para nada, por lo que no se pierde nada dejándolo vacío.

- QUIT: No me queda claro porqué te hace falta quitarlo. Si me comentás cómo lo estás usando tal vez pueda ver otra solución. La idea es que en modo desarrollo (_StartMode=0) hace RETURN y en el resto de ejecuciones (EXE,DLL,etc) hace QUIT, y como se supone que este programa se lo llama solo y no desde otro programa FoxPro, como por ejemplo desde SourceSafe, Plastic, CVS, etc, ese sería el funcionamiento deseable.
¿Vos lo estás ejecutando desde otro programa? ¿Qué uso le das o cómo tenés pensado usarlo? Porque de última puedo agregar alguna parametrización para evitar que tengas que estar modificando.

Muy buen trabajo con los reportes. Todavía me cuesta un poco interpretar las diferencias, pero está bueno.


Saludos!

Fernando D. Bozzo

unread,
Dec 16, 2013, 6:48:56 PM12/16/13
to publice...@googlegroups.com
Ah, Fidel, otra cosa: Desde la próxima versión voy a poner la parte del historial de versiones dentro de un tag especial, para que lo puedas leer con este programita:

*-- Para Fidel
#DEFINE HISTORIAL_I    '* <HISTORIAL DE CAMBIOS Y NOTAS IMPORTANTES>'
#DEFINE HISTORIAL_F    '* </HISTORIAL DE CAMBIOS Y NOTAS IMPORTANTES>'

LOCAL lcHistorial, laLinea(1), laHistorial(1,4)
lcHistorial    = STREXTRACT( FILETOSTR('FOXBIN2PRG.PRG'), HISTORIAL_I, HISTORIAL_F )
SET MEMOWIDTH TO 220    && Solo para prueba. Quitar en la función
CLEAR                    && Solo para prueba. Quitar en la función
*-- Formato a leer:
*-- [* 04/11/2013    FDBOZZO        v1.0 Creación inicial de las clases y soporte de los archivos VCX/SCX/PJX]
FOR I = 1 TO ALINES(laLinea, lcHistorial, 1+4+8)
    DIMENSION laHistorial(I,4)
    laHistorial(I,1)    = GETWORDNUM( laLinea(I), 2 )
    laHistorial(I,2)    = GETWORDNUM( laLinea(I), 3 )
    laHistorial(I,3)    = GETWORDNUM( laLinea(I), 4 )
    laHistorial(I,4)    = SUBSTR( laLinea(I), AT(laHistorial(I,3), laLinea(I)) + LEN(laHistorial(I,3)) + 1 )
    *-- Este '?' es solo de prueba
    ? '['+laHistorial(I,1)+']', '['+laHistorial(I,2)+']', '['+laHistorial(I,3)+']', '['+laHistorial(I,4)+']'
ENDFOR

*-- En este punto tenés el array laHistorial con 1 columna para cada dato.


Así lo podés poner en una función que te devuelva el array laHistorial y tenés los campos separados para que los uses como prefieras.


Saludos!



El lunes, 16 de diciembre de 2013 22:53:08 UTC+1, Fidel Charny escribió:

Fidel Charny

unread,
Dec 16, 2013, 7:10:35 PM12/16/13
to publice...@googlegroups.com
Fernando:
Muchas gracias por tus comentarios. En realidad lo del campo Properties comentado (Arial y compañía) no me afecta en mis formularios. Al menos, no he visto que tengan alguna pérdida. Pero no tengo casos de enorme complejidad (en general los evito).

En cuanto al famoso Quit, te diría que no pierdas tiempo con eso, porque mi trabajo está implementado de modo provisorio como el archivo incluido en el sistema, que no es lo que tenías pensado.

Actualmente construí un pequeño proyecto (llamado ThFoxBin) que tiene básicamente tres funciones:

1) Enlazar foxbin2prg (como resultado) a un parser que había construido hace tiempo y ahora mejoré con esta experiencia (para mí fantástica). Estos parser crean un lenguaje de marcado que me permite identificar cualquier diferencia entre un original y un modificado. Las diferencias se gestionan a través de una tabla que coordina para cada registro la situación en original y en reconstruido por foxbin2prg, y de ahí sale el reporte de diferencias. En la Tag <reference> pretendo explicar su uso.

2) La famosa copia de respaldo en archivos planos (sc2,vc2, etc. ) más la copia de imágenes utilizadas y un reporte general del proyecto.

3) Aprender a programar. Esta es la mejor parte, porque cada desarrollo genera distintos problemas que tienen que resolverse. Y poder espiar el modelo constructivo fantástico de foxbin2prg es un gran paso adelante. (El famoso: "Che, a ver qué hace este tipo!!"). Ja, me faltan unas cuantas materias, pero hago mi esfuerzo.

Bueno, mientras escribo esto veo el tema de la información de versiones. Ahí te cuento que venía todo fácil, hasta que se desplazó la "v1.12" (aparentemente le falta un Chr(9)) y siempre me decía que la última era la 11. Y como vengo trabajando con archivos planos y tags calificadas, me resultaba más fácil meter un parche y recompilar. Ahora tendrá otro modo de solución.

Ya que hablo al "cuete", las tags calificadas me resultan simpáticas. Un poco molestas a la vista con eso de tener el separador ("<campo|N|=12.50/>") pero el parser de la tag evita que tenga que pensar si era una fecha, un número, una booleana, etc. Ahí está todo y devuelve lo correcto.

No hablo más
Un abrazo y muchas gracias por tu preocupación!

Fidel.

Fidel Charny

unread,
Dec 16, 2013, 7:24:12 PM12/16/13
to publice...@googlegroups.com
Dije que no hablaba más pero parece imposible.
El riesgo que corres con foxbin2prg es que cada uno de nosotros le de una utilidad que no era la que te desvelaba. Edgar le encontró cierta utilidad y yo alguna otra. Íbamos al control de versiones no?, bueno, pero en el camino...
Como yo trabajo solo (como loco malo) mi preocupación por el control de versiones es parte de mi lucha espiritual contra mis propias tonterías. Como parte de esa lucha había escrito los parser, claro que son solamente para consultar y ver cómo estaba armada una clase o un form antes de los cambios. Y claro, me quedaba la posibilidad del copy / paste, que en aquellos tiempos (antes de foxbin2prg) no era poca cosa.

Muchas gracias!
Fidel

Fernando D. Bozzo

unread,
Dec 17, 2013, 3:48:01 AM12/17/13
to publice...@googlegroups.com
Ah, olvidé comentar otra cosa:

Desde la próxima versión se va a poder usar de esta forma para quienes lo quieran usar dentro de los programas por algún motivo:

goCnv    = CREATEOBJECT("c_foxbin2prg")
lnResp    
= goCnv.ejecutar( tc_InputFile, tcType_na, tcTextName_na, tlGenText_na, tcDontShowErrors, tcDebug, tcDontShowProgress )


Con lo que se termina el problema del QUIT, ya que no es responsabilidad del objeto cerrar nada, y de esa forma, y sin parámetros extra, lo solucionamos. Objetos puros! :-)

El QUIT solo quedará para las llamadas al Foxbin2prg como programa externo, lo que sigue cumpliendo con la idea original y evita que se quede el proceso en memoria.

Saludos.-

edgar suarez kummers

unread,
Dec 17, 2013, 10:03:24 AM12/17/13
to publice...@googlegroups.com
Estimado Fidel:

Yo opino que FOXBIN2PRG es una herramienta formidable, por ejemplo en simbiosis con NOTEPAD ++ o mejor con ULTRAEDIT es factible reformar una clase o un form.

Saludos y felicitaciones a FDBOZZO 

Fidel Charny

unread,
Dec 17, 2013, 10:24:22 AM12/17/13
to publice...@googlegroups.com
Edgar:
No puedo menos que coincidir con tus expresiones. También veo que Fernando está mirando un poco más allá, aunque me cuesta seguirlo. 
Para empezar me interesa sobremanera el respaldo en texto plano porque te olvidas de "no es un tabla" y cualquier otra cosa que por ahí te sorprende. Y los sc2, vc2 y cía reviven en todo su esplendor!!. Quite Magic!!!

Un abrazo
Fidel

Fernando D. Bozzo

unread,
Dec 17, 2013, 6:32:52 PM12/17/13
to publice...@googlegroups.com
Muchas gracias chicos!

Bueno, al fin, luego de varios días de lucha con el formato interno de los DBFs y sobre todo los DBCs y varias cosas indocumentadas, libero la release foxbin2prg v1.15 pública, en esta ocasión:

- Agregado soporte para convertir DBFs, DBCs e índices
- Agregado tag especial para identificar las releases de los comentarios
- Encapsulado de la clase c_foxbin2prg para evitar el QUIT cuando se usa solo el objeto con CreateObject y no el PRG completo con DO
- Refactorización y limpieza de código
- Agregados algunos casos de prueba automatizada de FoxUnit para los DBFs y DBCs
- Agregados unos cuántos comentarios para aclarar el código y los parámetros

Si se usa desde otro programa, se puede instanciar así:

LOCAL loCnv AS c_foxbin2prg OF "FOXBIN2PRG.PRG"
loCnv = NEWOBJECT("c_foxbin2prg", "FOXBIN2PRG.PRG")
loCnv.Ejecutar( <paráms> )


Que lo disfruten! :-)

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


Saludos.-

Fidel Charny

unread,
Dec 17, 2013, 7:23:48 PM12/17/13
to publice...@googlegroups.com
Gracias Fernando.
Ya está trabajando con el objeto en lugar del prg y resuelto el tema de las versiones. Formidable.
Mañana veré el tema de las dbf.

Un abrazo
Fidel

Fidel Charny

unread,
Dec 18, 2013, 8:24:40 AM12/18/13
to publice...@googlegroups.com
Fernando:
Las pruebas con tablas libres no presentan problemas. Genera el db2 y lo recupera con ftp y cdx cuando corresponde. Todo fantástico!!.

<Para_la_estadística>
* Para figurar en la estadística; en muchos casos es por envidia, pero en el mío es solo entusiasmo
1) Me gustaría (aunque, como decía Menem, "no e nesario" para el proceso), agregarle al encabezado una tag con la ruta de origen. "<root>c:\theodore\QuePlomaso</root>" 
2) Pienso que las tags <MemoFile> y <IndexFile> deberían ser boolean (Ufa!).
3) La tag <Database> no debería tener contenido cuando <FileType>0x00000003</FileType> (Foxbase, DbIII, etc). 
Por casualidad enganché una tabla que viene de Clipper 5.01 y se genera el db2 con datos erróneos en la tag <Database> (adjunto). No obstante trabaja bien y genera la cabecera exacta.
</Para_la_estadística>

Muchas gracias
Fidel
dbchek.zip

Fernando D. Bozzo

unread,
Dec 18, 2013, 9:16:04 AM12/18/13
to publice...@googlegroups.com
Hola Fidel:

1) ¿El tag de la cabecera no te sirve? Ahí está la ruta completa del archivo elegido para exportar.

De un DBC:
*< FOXBIN2PRG: Version="1.15" SourceFile="C:\DESA\FOXBIN2PRG\TESTS\DATOS_TEST\FB2P_DBC.DBC" Generated="2013/12/18 14:54:34" /> (Para uso con Visual FoxPro 9.0)

De un DBF:
*< FOXBIN2PRG: Version="1.15" SourceFile="C:\DESA\FOXBIN2PRG\TESTS\DATOS_TEST\FB2P_DBF.DBF" Generated="2013/12/18 14:54:39" /> (Para uso con Visual FoxPro 9.0)


2) No es capricho como está :-) es porque al regenerar el DBF leo esos campos, al igual que el resto, y los paso directamente a la propiedad correspondiente, así puedo reutilizar el mismo tratamiento para la mayor parte de los datos. Si no, me implica crear una lógica específica por campo y complica un poco el desarrollo, que intento mantener lo más sencillo posible.

3) Realmente esta herramienta es para binarios Visual FoxPro 9 (como pongo en todas las cabeceras de los DB2,DC2,VC2,etc) y no la había pensado para versiones anteriores, porque se complicaría bastante tener que tener en cuenta todas las diferencias binarias de las distintas versiones, además de que llevaría bastante tiempo y de que no tengo la documentación técnica de las versiones anteriores.

Igualmente hay una posibilidad, que es abrir la tabla, hacer un COPY TO <nuevaTabla> y exportar esa tabla. Claro que la nueva tabla pasa a ser Visual FoxPro y no dBase u otra.


Saludos.-

Fernando D. Bozzo

unread,
Dec 18, 2013, 9:27:55 AM12/18/13
to publice...@googlegroups.com
Un truco muy útil:

¿Sabían que si ponen un acceso directo del foxbin2prg.exe en el directorio "SendTo" (C:\Documents and Settings\USUARIO\SendTo) pueden hacer las conversiones haciendo click-derecho sobre el archivo y "Enviando" a foxbin2prg?

Lo había con varios programas esto, pero lo acabo de hacer con este y es una pasada de cómodo :-)


Fidel Charny

unread,
Dec 18, 2013, 9:50:49 AM12/18/13
to publice...@googlegroups.com
Fernando:
"Ya sé, no me digás, tenés razón...",  No había reparado en esa línea. No sé por qué pensé que era una info general. I'm very sorry!!!

Ah, por lo de las dbf viejas ni te preocupes. En realidad recordé que esa tabla no tenía cdx ni memo y quise probar. Realmente no estaba consciente de que era una tabla vieja. La utilizo solamente para coordinar la revisión de estructuras de tablas y ya la pasé a Visual Fox. Como la idea venía de Clipper 5.01, se ve que seguí con esa tabla sin convertirla (y dale con la chapuza!!). No tengo otros casos.

Este adjunto kordAdm_dif.txt es solo para que veas cómo funciona getrevisions.PRG (En realidad copié ese código a una clase con una pequeña adaptación para incluir la autoría). Una joya.

Un abrazo
Fidel
KORDADM_dif.txt

Fidel Charny

unread,
Dec 19, 2013, 1:56:39 PM12/19/13
to publice...@googlegroups.com
Estimado Fernando
Cuando intento procesar un archivo de proyecto me aparece el error del archivo adjunto.

Muchas gracias
Fidel
THEODORE.PJX.ERR

Fernando D. Bozzo

unread,
Dec 19, 2013, 2:00:05 PM12/19/13
to publice...@googlegroups.com
Hola Fidel:

El mismo dia que lo publiqué vi el problema y a las 2 hs lo había corregido y republicado. Si te lo bajás otra vez del mismo link debería funcionarte sin problemas.

Fidel Charny

unread,
Dec 19, 2013, 2:09:19 PM12/19/13
to publice...@googlegroups.com
Ok Fernando, no vi ese post. Ya lo bajo.
Muchas gracias.
Fidel.

Fernando D. Bozzo

unread,
Dec 21, 2013, 5:39:56 PM12/21/13
to publice...@googlegroups.com
Hola chicos:

Tengo la gran alegría de anunciar que este proyecto comienza desde hoy a formar parte de VFPX :-)

Link a la página del proyecto:
https://vfpx.codeplex.com/wikipage?title=FoxBin2Prg&referringTitle=Home


Saludos a tod@s!

Luis Maria Guayan

unread,
Dec 21, 2013, 5:50:22 PM12/21/13
to publice...@googlegroups.com
Felicidades Fernando !

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

edgar suarez kummers

unread,
Dec 21, 2013, 10:45:48 PM12/21/13
to publice...@googlegroups.com
Estimado Fernando, estás ingresando a las grandes ligas por la puerta de enfrente.

Saludos y felicitaciones por tus logros, haces mucho bien a todos.

José Luis

unread,
Dec 22, 2013, 8:05:19 AM12/22/13
to publice...@googlegroups.com
Buenas, como estas Fernando. Esta estupendo tu trabajo y muchas gracias por compartir tu proyecto y logro con toda la comunidad.

Seria muy conveniente que en VFPX colocaras el comentario tambien en español (así como esta dentro en el foxbin2prg.zip del archivo Readme) para los que estén navegando por allá y que no dominamos el ingles se nos haga facil leerlo y enteder correctamente sin necesidad de usar traductor ya que queda el problema de gramatica, solo eso queria comentarte, y nuevamente gracias por compartir.

Saludos

Fernando D. Bozzo

unread,
Dec 22, 2013, 8:48:24 AM12/22/13
to publice...@googlegroups.com
Hecho José Luis! Ahora se puede ver un link a la página en Español en el título ;-)

Ricardo Pina

unread,
Dec 22, 2013, 9:36:25 AM12/22/13
to Grupo VFP
Hola Fernando

Excelente trabajo, ya lo era desde antes y esta publicación lo confirma
Mi más sinceras Felicitaciones. ( bah, con un poco de envidia porque me demuestra lo lejos que estoy) :-(

Saludos

PD: Sumo a Fidel que con sus 2 centavos te hizo transpirar unos días.


--
            

                   Ricardo Pina

Desarrollo y Servicios Informáticos

                  Profesionales
               www.dsip.com.ar

 

 

Fernando D. Bozzo

unread,
Dec 22, 2013, 9:40:47 AM12/22/13
to publice...@googlegroups.com
Gracias a todos, y a Fidel, sin el cual las pruebas se hubieran hecho bastante más difíciles.

Saludos, y espero que les sea útil!

Es mi regalo de Navidad :-)



El domingo, 22 de diciembre de 2013 14:05:19 UTC+1, José Luis escribió:

Jorge Blas Diaz Armesto

unread,
Dec 23, 2013, 12:13:15 PM12/23/13
to publice...@googlegroups.com

ENHORABUENA TRIMEGISTRO(TRES VECES MAESTRO ) FERNANDO

Fidel Charny

unread,
Dec 29, 2013, 7:43:08 AM12/29/13
to publice...@googlegroups.com
Hola Fernando
Veo con gran alegría que Foxbin2prg ha alcanzado el lugar que se merece!
Después de unos días en la costa,  retomaré mis intentos de aprender a programar, leyendo y tratando de interpretar el fantástico código de Foxbin2prg.  

Un abrazo!
Fidel.

Fernando D. Bozzo

unread,
Dec 29, 2013, 8:39:30 AM12/29/13
to publice...@googlegroups.com
Gracias Fidel! Y espero que lo hayas pasado muy bien.

Estoy metido con la conversión de los menus. Ya terminé la generación de Texto desde el binario, y ahora estoy en la fase contraria, hacer el binario.

Dejo un ejemplo de un menú convertido a texto, donde quise no solo pasarlo a texto, sino intentar que se vean los niveles de anidamiento de las opciones, y creo que está saliendo como quería:


*--------------------------------------------------------------------------------------------------------------------------------------------------------
* (ES) AUTOGENERADO - ¡¡ATENCIÓN!! - ¡¡NO PENSADO PARA EJECUTAR!! USAR SOLAMENTE PARA INTEGRAR CAMBIOS Y ALMACENAR CON HERRAMIENTAS SCM!!
* (EN) AUTOGENERATED - ATTENTION!! - NOT INTENDED FOR EXECUTION!! USE ONLY FOR MERGING CHANGES AND STORING WITH SCM TOOLS!!
*--------------------------------------------------------------------------------------------------------------------------------------------------------
*< FOXBIN2PRG: Version="1.16" SourceFile="C:\DESA\foxbin2prg\TESTS\DATOS_READONLY\menu1.mnx" Generated="2013/12/29 12:26:42" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries)
*
*<MenuType>1</MenuType>

*<SetupCode>
*-- Setup code

*</SetupCode>

*<MenuCode>
*----------------------------------
DEFINE PAD _3YM15TGSZ OF _MSYSMENU PROMPT "Opción A con submenú" COLOR SCHEME 3 ;
    NEGOTIATE NONE, LEFT ;
    KEY DEL, "Pulsar <DEL>" ;
    SKIP FOR SKIP_FOR() ;
    MESSAGE "Mensaje para Opción A con submenú" && Comentario

ON PAD _3YM15TGSZ OF _MSYSMENU ACTIVATE POPUP OpciónA_CS

    *----------------------------------
    DEFINE POPUP OpciónA_CS MARGIN RELATIVE SHADOW COLOR SCHEME 4
    *----------------------------------
    DEFINE BAR 1 OF OpciónA_CS PROMPT "Opción A-1" ;
        PICTURE "..\..\foxunit\fxuacknowledgements.bmp"
    ON BAR 1 OF OpciónA_CS ACTIVATE POPUP OpciónA1

        *----------------------------------
        DEFINE POPUP OpciónA1 MARGIN RELATIVE SHADOW COLOR SCHEME 4
        *----------------------------------
        DEFINE BAR Shortcut_Menu_Title OF OpciónA1 PROMPT "OpciónA-1-Sub" ;
            PICTURE "..\..\foxunit\fxuacknowledgements.bmp"
        ON SELECTION BAR 1 OF OpciónA1 wait window "Ejecuta Comando o función para Opción A-1"

    *----------------------------------
    DEFINE BAR 2 OF OpciónA_CS PROMPT "Opción A-2"
    ON BAR 2 OF OpciónA_CS ACTIVATE POPUP OpciónA2Su

        *----------------------------------
        DEFINE POPUP OpciónA2Su MARGIN RELATIVE SHADOW COLOR SCHEME 4
        *----------------------------------
        DEFINE BAR 1 OF OpciónA2Su PROMPT "Opción A-2-Sub.1" ;
            MESSAGE "Message para Opción A-2-Sub.1 (Tipo Procedure)"
        ON SELECTION BAR 1 OF OpciónA2Su DO Menu1_Opción_A_2_Sub_SNIPPET

        *----------------------------------
        DEFINE BAR 2 OF OpciónA2Su PROMPT "O\<pción A-2-Sub.2" ;
            KEY CTRL+E, "Pulsar CTRL+E" ;
            SKIP FOR NOT glEnabled_Opc_A_2_Sub_2 ;
            MESSAGE "Mensaje para _Opc_A_2_Sub_2 (Tipo Command y con Bar # 2)" && Comentario para Opción A-2-Sub.2 (Tipo Command y con Bar # 2)
        ON SELECTION BAR 2 OF OpciónA2Su wait window "Ejecuta Comando o función para Opción A-2-Sub.2"

        *----------------------------------
        DEFINE BAR 3 OF OpciónA2Su PROMPT "Opción A-2-Sub.4" ;
            MESSAGE "Message para Opción A-2-Sub.4 (Tipo Submenu)"
        ON BAR 3 OF OpciónA2Su ACTIVATE POPUP _3yl0d68e0

            *----------------------------------
            DEFINE POPUP _3yl0d68e0 MARGIN RELATIVE SHADOW COLOR SCHEME 4
            *----------------------------------
            DEFINE BAR 1 OF _3yl0d68e0 PROMPT "FIN!" ;
                MESSAGE "Message para FIN! (Tipo Command)"
            ON SELECTION BAR 1 OF _3yl0d68e0 QUIT

        *----------------------------------
        DEFINE BAR _MFI_SYSPRINT OF OpciónA2Su PROMPT "Opción A-2-Sub.3" ;
            KEY CTRL+R, "CTRL+R" ;
            SKIP FOR NOT glEnabled_Opc_A_2_Sub_3 ;
            PICTRES _mfi_sysprint ;
            MESSAGE "Message para Opción A-2-Sub.3 (Tipo Bar#)" && Comentarios para Opción A-2-Sub.3

*----------------------------------
DEFINE PAD opc_b OF _MSYSMENU PROMPT "Opción B con comando" COLOR SCHEME 3 ;
    KEY CTRL+B, "Pulse CTRL+B" ;
    SKIP FOR NOT glEnabled_Opc_B ;
    MESSAGE "Mensaje para Opción B con Command" && Comentario de la Opción b

ON SELECTION PAD opc_b OF _MSYSMENU WAIT WINDOW "Opción B"

ON SELECTION MENU _MSYSMENU *-- Menu Procedure
ON SELECTION POPUP ALL *- Menu bar procedure

PROCEDURE Menu1_Opción_A_2_Sub_SNIPPET
*-- Mi procedure!

ENDPROC


*</MenuCode>

*<CleanupCode>
*-- Cleanup code

*</CleanupCode>

edgar suarez kummers

unread,
Dec 29, 2013, 11:42:09 AM12/29/13
to publice...@googlegroups.com
aplauso.jpg
Reply all
Reply to author
Forward
0 new messages