martes, marzo 29, 2005

It's time to get Funcky.... again !!!!

En los viejos tiempos del Clipper, una de las librerías que mas era utilizada por los programadores era precisamente Funcky.

Funcky era seguramente la librería de funciones mas completa que existía para Clipper, con mas de 1,000 distintas funciones que cubrian muchas de las necesidades de cualquier programador.
El tiempo ha pasado, y hace como 4 años años, Dirk Lesko, el autor de Funcky original, decidió embarcarse nuevamente en el proyecto de crear Funcky para los lenguajes de programación para Windows.

La versión de Funcky 6.0 es el resultado de mas de 2 años de desarrollo, el nuevo Funcky es un componente OLE que puede ser accesado desde cualquier lenguaje de programación, llamese como se llame, C++, Visual Basic, Delphi, CA-Visual Objects, etc.

Siendo (x)Harbour un proyecto solo conocido por una comunidad determinada (leáse nosotros), no figura dentro de lista de preferidos de Funcky, peeeerooo, si tomamos en cuenta que el código (x)Harbour es en realidad código en "C", luego entonces, podemos deducir que si hay Funcky para Borland C++, podemos utilizar esa versión para nuestro programa (x)Harbour.

Esto es cierto, pero hay aún una forma mucho mas sencilla de utilizar Funcky y es por medio de OLE, xHarbour tiene soporte nativo OLE con lo cual no debe significar ningún problema utilizar Funcky, con Harbour la cosa cambia, porque hay que linkear externamente la clase TOLEAUTO para hacer funcionar la librería.

Funcky no es un componente exclusivo para aplicaciones gráficas de Windows, es decir, con ventanitas, es perfectamente utilizable también desde aplicaciones (x)Harbour que se ejecuten en una ventana de terminal (DOS).

Funcky tiene funciones para un montón de cosas, algunas extremadamente útiles y otras que solo por diversión es interesante mirar. Varios objetos constituyen la librería completa de Funcky, y es sumamente simple utilizarlos, basta con crear un objeto TOLEAUTO y listo:

oFuncky := TOleAuto():New("Funcky")

A partir de este punto tenemos listo un objeto llamado oFuncky el cual podemos explotar a nuestras anchas, por ejemplo si queremos obtener una lista de todas la unidades de disco conectadas a nuestra computadora haremos una llamada al método :AllDrives() :

cDrives := oFuncky:AllDrives()

Y esto nos devolvera una cadena de caracteres con las letras de todas las unidades que existan conectadas ("a: c: d: w:" por ejemplo), de esta forma tendremos acceso a mas de 400 métodos para hacer práticamene cualquier cosa que deseemos.

Adicionalmente al objeto Funcky, existen otros 30 objetos dentro del mismo componente, cada uno con sus propios métodos, eventos y variables de instancia. Hay práticamente un objeto para cualquier cosa que quieras hacer.

Por ejemplo si queremos hacer un TraceRoute a una dirección IP, podemos hacer esto utilizando un objeto FunckyTraceRoute (ejemplo escrito en FiveWin + xHarbour + Borland C++):

oFunckyTrace := TOleAuto():New("FUNCkyTraceRoute")

nTotal = 0
aTrace := {}

oFunckyTrace:FindFirst("ciber-tec.com")

DO WHILE oFunckyTrace:Found()
AADD(aTrace,oFunckyTrace:Name+" "+ALLTRIM(STR(oFunckyTrace:RTT))+" ms")
oFunckyTrace:FindNext()
ENDDO

MsgList(aTrace)

¿ Y que pasa si queremos una lista de todas las impresoras conectadas a la computadora ?, bueno pues utilizaremos un objeto FunckyFindPrinter de esta manera:

aPrinters := {}

oFunckyPrinters := TOleAuto():New("FUNCkyFindPrinter")
oFunckyPrinters:FindFirst()

DO WHILE oFunckyPrinters:Found()
AADD(aPrinters,oFunckyPrinters:Name())
oFunckyPrinters:FindNext()
ENDDO

MsgList(aPrinters)

Como ves es super fácil utilizar Funcky, además la documentación viene super completa, con ejemplos y todo lo necesario, no esperes encontrarte una documentación para (x)Harbour tal cual, no existe, pero te las puedes arreglar con la documentación para Visual Basic o Delphi.

Una de las principales ventajas de Funcky es que tanto los valores pasados como parámetros como retornados por los métodos solo son de 3 tipos: Lógicos, Caracter o Numéricos, con lo cual te ahorras tener que complicarte la vida con cosas propias del "C" como bytes, chars, longs, doubles, etc.

He escrito un pequeño demo del uso de Funcky con FiveWin, que puedes descargar haciendo click aquí incluye código fuente y el EXE en caso de que no tengas manera de compilarlo, claro necesitarás tener Funcky instalado en tu computadora para poder ejecutarlo.

Si no cuentas con Funcky, puedes descargarte una version "lite" del su sitio en Internet www.funcky.com, solo asegurate de que descargues el componente COM, que es el que se utiliza con (x)Harbour.

Para comparlo, bueno, aquí es donde se le acaba la gracia, Funcky cuesta 349.00 USD la versión completa.... pero si tienes una Funcky para Clipper DOS solo pagas 149.00 USD, siendo sincero, es la unica librería de funciones que vas a necesitar y vale la pena el gasto.

1 comentario:

Anónimo dijo...

Hola René, Soy Roberto de Buenos Aires, y apelo a vos por la claridad de conceptos que tenes para pedirte, si cabe por este medio, que hagas alguna nota aclaratoria sobre el uso de ole a traves de xharbour/harbour/fivewin.
Sucede que, al menos en mi caso, la confusion es total:
createobject()?
createoleobject()?
toleauto:new()?
cual es cual? son lo mismo?, cual corresponde a xharbour y cual a harbour? si tomo la libreria para ole de Gimenez y la recompilo con harbour esta operativa?
Puedo manejar eventos con xharbour? como?
como seteo propiedades?
Y con fivewin que onda?
en fin te pido que si tenes algo de tiempo eches un poco de luz sobre esta herramienta que se me ocurre muy potente y que al menos yo la tengo bastante a oscuras.
Gracias adelantadas.
Un abrazo.
Roberto.