xaScript

Es una potente herramienta de scripting que abre completamente nuevas posibilidades a los desarrolladores de Harbour. xaScript le permite crear código fuente Harbour desde sus propios programas que luego podrá ser evaluado en tiempo de ejecución sin necesidad de utilizar para nada el propio compilador de Harbour o un enlazador. 

Esta nueva herramienta lleva las posibilidad de la clásica ‘Macro‘ al máximo nivel. Con xaScript puede crear aplicaciones que cambien completamente su interface en tiempo de ejecución, o que se ajusten a las preferencias individuales de cada uno de sus clientes sin necesidad de tener una versión individual de su aplicación para cada uno de ellos. 
 
xaScript es una pequeña librería que puede ser enlazada con su aplicación para ofrecerle toda la potencia del scripting. 
 
Son tan sólo tres pasos los necesarios para ejecutar cualquier script, que son: 
oScript := TScript():New( cTexto )
oScript:Compile()
oScript:Run()  
¡¡ Eso es todo ll! 
 
Un archivo script puede contener más de una función, incluso puede añadir a un script todos los archivos de código fuente que desee.
 
Absolutamente todas las funciones incluidas en todos los archivos, al igual que cualquier otra función existente en su aplicación, son accesibles desde el scripting. 
 
xaScript detecta todos los errores de sintaxis en el proceso de compilación, pero no se ejecuta ningún código durante ese proceso. 
 
Puede pasar hasta 10 parámetros a cualquier función, por ejemplo: 
 
 xRet := oScript:Compile( "Test", 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 )
Esta expresión ejecutará la función ‘Test’ con diez parámetros numéricos y la variable xRet retendrá el valor retornado por la función. 
 
Puede crear variables globales (Public) de la misma forma que lo hace en Harbour pero con la instrucción STATIC al principio del módulo a compilar: 
 
STATIC a := 1  
FUNCTION ....  
  ...  
  ...  
RETURN ...  
Este tipo de variables son accesibles desde cualquier función dentro del script. También puede crear variables de ámbito local con las instrucciones LOCAL o STATIC pero ya dentro de la declaración de la función. Las variables estáticas retienen su valor entre diferentes llamadas. 
 
FUNCTION Test()  
  Static cText := "hello", cFile := "reamdme.txt"  
  Local xVar := 1  
  ..........  
  ..........  
RETURN .T.  
Todos los operadores aritméticos y booleanos de Harbour son soportados.  Las siguientes instrucciones son soportadas y pueden ser anidadas a cualquier nivel: 
  • IF, ELSEIF, ELSE, ENDIF  
  • DO CASE, CASE, OTHERWISE, ENDCASE  
  • DO WHILE, END WHILE  
  • FOR, NEXT  
  • LOOP, EXIT  
  • RETURN  
  • WITH Ob jeto, END WITH  
  • FOR EACH, NEXT  
  • TRY, CATCH, END  
Puede ejecutar cualquier función de Harbour desde su archivo Script siempre que dicha función este enlazada con su aplicación. Si usted recibe el mensaje de error: ‘Function not found’, lo único que tiene que hacer es utilizar la instrucción REQUEST para forzar que la función se adjunte al ejecutable. Por ejemplo: 
REQUEST Descend, Alltrim  
Esto hará accesible las funciones Descend y Alltrim en su archivo script incluso aunque no se usen en ninguna parte de su aplicación. 
Requerimientos:
xaScript tan sólo funciona con Harbour. El software de acompañamiento de xaScript esta realizado con Xailer, sin embargo no es necesario en absoluto Xailer para usarlo. 
Limitaciones:
La funcionalidad de xaScript está basada en el soporte de ‘macros’ que incluye el propio Harbour, por lo que hereda todos sus ventajas y limitaciones. xaScript no es un sustituto de Harbour ni debe usarse de esa forma, tan sólo lleva el soporte de macros de Harbour a su máximo nivel. 
 
El ánimo de xaScript es soportar en su totalidad todas las características del lenguaje CA-Clipper. Algunas de las extensiones del lenguaje introducidas por Harbour son soportadas, pero no todas en su totalidad. 
 
Las actuales limitaciones conocidas de xaScript son: 
  • Recursividad en funciones de scripting no está soportado  
  • Directiva BEGIN SEQUENCE no soportada  
  • Creación de clases limitada.  
  • Cláusula FINALLY en bloques TRY-CATCH no soportado  
  • Comando SWITCH no soportado, deberá usar DO CASE en su vez  
Enlazado:

Simplemente incluya la librería xascript.lib en su fichero de enlazado.

¡Eso es todo!