Conversión a BBj: Lo que Debe Tener Presente

Los programas en BBx2 y BBx3 primero se deben convertir a Pro5 para que trabajen con BBj.

Si desea ver una reseña de los cambios hechos a BBj desde versiones anteriores de los productos BASIS, consulte la documentación en línea.

NOTA IMPORTANTE:

Lea toda la información sobre conversión y respalde sus programas originales antes de iniciar cualquier proceso de conversión.

Paso 1. Ejecute la utilidad keyword utility. Este programa forma parte de las utilidades estándar (basis/utils/std/). Varias instrucciones y variables de sistema son palabras reservadas en BBj, por lo que no podrá seguir usándolas en sus programas. La utilidad _keyword revisa los programas BBx4 o Pro5 y genera una lista de propuestas de cambios de palabras clave. También puede actualizar los programas, modificar las palabras clave que se utilizan como nombres de variables para que no se generan errores de compilación en BBj. La lista completa de palabras reservadas se pueden encontrar en el archivo de texto basis/utils/std/_keyword.dat.

Revise cuidadosamente la salida resultante de la utilidad _keyword. Algunos de los cambias hechos pueden poner en evidencia errores en los programas. Si encuentra que las palabras LET, THEN, ELSE o cualquier variable de sistema como DAY o TIM, es una buena oportunidad para revisar el código y corregirlo.

Paso 2. Recompile sus programas para BBj usando el programa bbjcpl. BBj puede ejecutar directamente programas BBx4 o Pro5, de manera que este paso no es estrictamente necesario, pero tenga presente que los programas recompilados por BBj se cargarán mucho más rápido que los programas Bbx4 o Pro5.

Ejemplo

Use la siguiente línea de comando para convertir programas Pro5 en la carpeta /prog/bbx/ a programas BBj en la ruta /prog/bbx/, indicando un archivo de registro llamado err.log:

bbjcpl –d/prog/bbj/ /prog/bbx/* -eerr.log

Revise el archivo de registro y corrija los errores antes de continuar.

Paso 3. Uno de los más importantes objetivos de diseño de BBj ha sido mantener un alto nivel de compatibilidad con BBx. Sin embargo, BBj no es idéntico al lenguaje BBx. La siguiente lista incluye los cambios que más comúnmente afectan el código de aplicaciones típicas.

  1. BBj es capaz de cargar y ejecutar programas compilados en BBx4 o Pro5, pero si un programa es grabado desde BBj (o convertido a BBj usando bbjcpl), luego no podrá ser ejecutado en Pro5. Note que el código que no use características específicas de BBj siempre puede migrarse a Pro5 usndo bbjlst y pro5cpl. Esto es similar a niveles previos de actualización, por ejemplo, desde BBx4 a Pro5.

  2. Las funciones CPL(), LST() y PGM() trabajan con código fuente literal, no compilado. Cualquier utilidad que use estas funciones para manipular programas compilados deberá revisarse o reescribirse.

  3. El tipo para programas BBj compilados en la función FID() corresponde a $84$. El tipo para programas BBx compilados continúa siendo $04$.

  4. La versión BBj de la función DATE() y la función CVS() parámetros 4 y 8 (mayúsculas y minúsculas) entregan resultado internacionalizado basado en el valor que tenga la variable global STBL(“!LOCALE”), por sobre la asignación dada por el usuario en la variable global STBL(“!CTYPE”) y STBL(“!DATE”). Por ejemplo, para conertir CVS() y DATE() a formato Alemán, puede incluir la siguiente línea en su archivo config.bbx: SET !LOCALE=de. Otro código de lenguaje común es fr (Francés), es (Español), nl (Holandés) e it (Italiano).

  5. Algunos de los valores entregados por la función INFO() han cambiado. INFO(0,0) es el que más afecta el código de aplicaciones. Con los productos BBx, esta cadena (que identifica el sistema operativo de la máquina) se define en el proceso de compilado, así que está bajo el directo control de BASIS. BBj toma este valor desde la Máquina Virtual de JAVA, y el resultado puede variar desde un JVM a otro. Basado en nuestras pruebas con varias JVM, BBj normalmente retorna “Windows NT” en lugar de “WIN/NT” y “Windows” en lugar de “WIN95”.

  6. En ambientes GUI, el INFO(6,0) en BBj retorna “SWING”, mientras que Visual Pro5 retorna “WINDOWS”. Si no hay disponible un dispositivo GUI, INFO(6,0) retorna “”.

  7. El comportamiento normal de la función SCALL() es pasar la cadena de comandos al procesador de comandos. El procesador de comandos normalmente es /bin/sh en Unix y COMMAND.COM o CMD.EXE en Windows. El usuario no verá ninguna diferencia entre Pro5 y BBj bajo Unix, pero bajo Windows, puede aparecer una ventana emergente que en Visual Pro5 no aparece.

  8. Cambios menores en las funciones DSZ,SYS y TIM podrían afectar su código. Revise las notas de documentación para éstas funciones y revise su código si es necesario.

  9. El tamaño de memoria disponible en BBj es determinado por la JVM, no por el tamaño dado con la instrucción START. La memoria en el espacio de trabajo es dinámica. El número de páginas especificado en el argumento –m de la línea de comando o en la instrucción START son ignorados. Una consecuencia de esto es que BBj nunca generaráun ¡!ERROR=31. Las condiciones de falta de memoria se señalan con el ¡!ERROR=33 en BBj, el cual indica que la totalidad de la memoria en la JVM ha sido utilizada.

  10. El portapapeles de BBj sólo soporta texto. Los programas Visual Pro5 que manipulan formatos binarios (como .WAV, .BMP, y .RTF) necesitarán ser revisados.

  11. BBj no soporta archivos de tipo CISAM.

  12. El controlador de plantillas BBj reporta un desbordamiento de enteros en cualquier intento de asignar un valor fuera de rango a un campo entero con signo (template tipo I). Por ejemplo, dada la siguiente línea de código, BBx imprime -1, pero BBj genera !ERROR=41:

    1. 0100 DIM X$:”I:I(1)”; LET X.I=255; PRINT X.I

  13. En scripts de inicio y funciones SCALL(), cambie pro5 y vpro5 a bbj, pro5cpl a bbjcpl, y pro5lst a bbjlst. En muchos casos, basta con cambiar el nombre del programa, dado que los argumentos de dichos comandos permanecen sin cambios.

  14. La instrucción BBj SETTIME siempre genera un ¡!ERROR=18.

  15. En BBj, la primera llamada a la función RESOPEN() entregará un valor de control 1. En Visual Pro5, la primera llamada a la función RESOPEN() entregará un valor de control 0.

  16. En Pro5, cuando se ejecuta una operación SQL SELECT desde una sola tabla usando el motor SQL interno, la función SQLTMPL() entregará una plantilla de registro que coincide con la plantilla de archivo definida en el diccionario de datos. En BBj, no es necesario. Vea SQL Select Modifications para mayor información.

  17. La siguiente estructura, que es legal en BBx, genera un error de sintaxis en BBj:

    1. 0100 IF X<Y THEN FOR I=X TO Y ELSE FOR I=Y TO X

  18. Si usa dispositivos plotter (alias Dx), note que BBj sólo soporta SYSPLOT (ploteo en pantalla). El programa filtro PRO5PLOT, que permite la salida a plotters e impresoras HP LaserJet, no está soportado.

  19. Vea Function and Edit Keys for BBj Character Devices para enterarse de los cambios que afectan a los mnemónicos ‘FL’ y ‘EL’.

  20. En BBx, READRECORD (0,SIZ=1)LLAVE$ retorna $0D$ cuando se presiona la tecla ENTER y $0A$ para el avance de línea (Ctrl-J). Puesto que Java no distingue entre Enter ($0D$) y avance de línea ($0A$), BBj entregará $0D$ en ambos casos.

  21. En BBj, el motor SQL ejecuta una verificación más extensa durante la fase de preparación que la que hace Pro5 y Visual Pro5. En algunos casos, esto puede producir errores causados durante las llamadas a SQLPREP en lugar de hacerlo durante la ejecución de SQLEXEC. Por ejemplo, si intenta preparar una sentencia DROP TABLE aludiendo a una tabla que no existe, generará un error en la llamada a SQLPREP.

  22. Se han realizado varias mejoras al control grid (grilla) para mejorar su usabilidad. Estos cambios pueden ocasionar algunos problemas en programas Visual Pro5 que usan grillas. Para hacer que las grillas trabajen en BBj de la misma forma que Visual Pro5, use SETOPTS byte 8, bit $10$. Para mayor información, vea General Grid Enhancement Information.

  23. En BBj, el mnemónico MINICON no soporta archivos de tipo .exe, .dll e .icl.

  24. Revise la documentación de SETTERM para ver un ejemplo de cómo usar esta instrucción en aplicaciones que usan el FID(0) y que se ejecutarán en un navegador web.

  25. BBj usa archivos de recursos en formato ASCII (.arc) en vez de usar archivos binarios (.brc). Vea las instrucciones en la sección Coverting Resource File Formats, para saber como convertir automáticamente archivos de recursos binarios en archivos ASCII usando los parámetros en la línea de comando de ResBuilder.

  26. BBj usa una librería externa para acceder a los puertos seriales. Actualmente sólo está disponible en Windows y Linux.