HERRAMIENTAS OS/2
Programación Visual en REXX
.XXy'V x
En este artículo vamos a tratar los fundamentos de la programación visual en REXX
y hablaremos de dos de sus grandes productos para OS/2: VisPro/REXX de Hockware
y VX-REXX de Watcom.
H' ACE años, en 1985, tuve mi primer contac
to con el lfnguaje REXX en el entornoVM/CMS. He de decir que fue una experiencia realmente gratificante y positiva. Me
enfrentaba a un lenguaje potente, flexible y a la vez sencillo. Un lenguaje que interaccionaba con el sistema de unamanera asombrosamente natural. Un lenguaje estructu-.rada que me permitía programar profesionalmente.
En el 85, el mundo de los PCs todavía estaba en pañales. Era impensable una implementación de REXX en Pe.Pero las cosas fueron avanzando rápidamente y en pocosaños, dispusimos de REXX tanto para DOS como paraOS/2.
En el entorno microinformático REXX presentaba dosimportantes novedades respecto a su implementación demainframe: La primera consistía en ofrecer la posibilidadde ampliar las funciones incorporadas de REXX con funciones externas escritas en otros lenguajes. La segunda, enposibilitar llamadas al intérprete de REXX desde programas escritos en otro lenguaje.
Estas dos innovaciones son las que han permitido la existencia, en la actualidad, de aplicaciones que usan un entorno de programación visual basadas en REXX. Para poderacceder a las APIs de Presentation Manager (PM) de OS/2,necesitamos utilizar funciones externas escritas en un lenguaje distinto al REXX ya que éste no tie~e acceso direc-
to a las APls. Por otra parte, REXX no interactúa directamente con el entorno PM por lo que su código debe serejecutado desde otro programa que le proporcione elentorno PM. Aquí tenemos, pues las bases de la programación visual en REXX. Toda la lógica de nuestras aplicaciones está escrita en REXX. Cuando hay interaccióncon PM, utilizamos funciones externas y el entorno PMnos viene dado por el ejecutable que se genera.
Los productos que nos permiten la programación visualen REXX siguen un esquema muy similar. Proporcionan
Franeese Rosés
Francesc Rosés, nacido en Barcelona en 1958, es licenciado enFilologfa Catalana por la Universidad de Barcelona. Desde 1985 desarrolla en el Centre dÍnformatica de la Universitat de Barcelona (ClUB)la coordinación informática de diversos proyectos de lexicografía com-
putacional. Profesor del Máster de Lingüistica Aplicada de laUniversidad de Barcelona. Desde 1994 es el responsable de la sección
de Microinformática del ClUB. Su dirección Internet [email protected].
José María Blaseo
José Marfa Blasco, nacido en 1960, es Licenciado en Matemáticaspor la Universidad de Barcelona. Ha sido profesor de Programación enla Facultad de Informática de Barcelona, y Coordinador Nacional de la
red EARN en Alemania. Sus temas de interés más recientes son lasredes, la programación orientada a objeto, las bases de datos, y todo lo
relacionado con OS/2. Su dirección Internet es [email protected].
RPP NQ 16
31
HERRAMIENTAS OS/2
EOf1\1 _~~ecled fdl,- Ylew lOOI$'. tlelp
una interfaz gráfica (GUI) que nospermite manejar los distintos objetos(campos de entrada, botones, contenedores, etc.) de manera visual (arrastrando y soltando para incluir objetos o cambiarlos de posición ytamaño). Además, la GUI sirve también para asignar comportamiento aesos objetos. Este comportamientoestá sujeto a eventos. Que un botón seapulsado es un evento. Cuando el evento se produce, podemos realizar unaserie de acciones que configurarán sucomportamiento. El lenguaje que utilizamos para crear los comportamientos es REXX. La GUI suele proporcionarnos un editor que nos facilitala escritura de esos comportamientos.Si seleccionamos un evento de un objeto, se nos abre una ventana de edición. Allí podemos escribir las acciones necesarias para ese evento.
Cada objeto tiene un conjunto deacciones posibles. Hay acciones comunes para rodos los objetos (todo objeto puede hacerse visible o invisible)pero las hay que sólo pueden realizarse en algunos objetos. Podemospulsar un botón, pero no un texto. Notiene sentido hacer un doble clic en unbotón, pero puede tenerlo en una lista(list box). La GUI nos facilita la escritura de estas acciones para añadir comportamiento a un objeto.
Pongamos un ejemplo sencillo.Pretendemos escribir una aplicaciónsencilla que nos muestre una caja dediálogo con una lista y un botón.Queremos, además, que cada vez quepulsamos ese botón se nos añada alfinal de la lista la fecha actual. La GUInos proporciona una ventana vacía.ynos muestra el conjunto de objetosdisponibles. Seleccionamos el objetolista y lo arrastramos hasta la ventana vacía. Seleccionamos el objetobotón y repetimos la operación. Unavez situados en la ventana, modificamos su tamaño y damos un título albotón. Utilizando una GUI, estamosdiseñando otra. Pero sólo tenemos losobjetos. Hay que dar comportamiento a la aplicación. Para ello, accedemosa la lista de eventos del objeto botón
U D CJ
DD
Figura e Aspecto inicial de la GUI deVisPro/REXX
Moin RESOURCE.VPR SUBFROCS THREADS VP8ACKUP
Figura A Aspecto inicial de una carpeta deproyectos de VisPro/REXX
[orm ,~cl(!d~~ 011 Y"rDW Ioots l!4Npo '00
'0
E:roJe-CI 100ls ytlndows -Mun (ipl1ons lJ.etpEntrjilehJ -
\?J .
I
l.
Figura B Aspecto inicial de una carpetade proyectos de VX-REXX
mliiiii-!iiI Window1VRX Window1VRY
iii VX-REXX Projecl - Icon View
RPP Nº 16
32
HERRAMIENTAS OS/2
vispro/REXX
y escogemos el evento when clicked("al hacer clic"). Aparece el editor deeventos y arrastramos hasta el objetolista. Aparece el conjunto de accionesque podemos realizar con el objetolista. Escogemos add item to end("añadir un elemento al final"). Ahorasólo hay que especificar qué valor añadimos. Sencillo y efectivo.
Una vez tenemos la aplicación diseñada, sólo nos queda probarla. Paraello tenemos dos opciones. Crear unprograma ejecutable y ejecutarla, oejecutarla sin generar el programa ejecutable. Si aparece algún error, siempre podemos ejecutar la aplicación enmodo depuración.
El esquema que aquí hemos esbozado a grandes rasgos es el que se utiliza en todos los productos disponibles en el mercado.
Hablaremos aquí de dos de los productos de más éxito en el ámbito dela programación visual para el entorno OS/2: VisProIREXX, deHockware, y VX-REXX, de Watcom.Ambos son unos excelentes productosque facilitan en gran manera el desa-
.... ~ j
I In••!-.C~!__~_Irl&:!!~ __
]." I ......
l't~ JIWh ~...... ~ ~Qn!!.. _~ 'Pa.I' fPwtollur1"",l
SíNoNoSíSíSísíSíSiSiNoSísíNosísísíNoSíSíNoSiSísíSíSísíSí
rrollo de aplicaciones. Estos productos presentan posibilidades muy similares. Yo destacaría dos diferencias:la interfaz utilizada para el desarrollo y el método de generación de ejecutables.
Hablemos primero de las posibilidades que nos ofrecen. Ya ha blaremas luego de las diferencias.
Ambos productos nos ofrecen casial completo toda la gama de objetosdisponibles en PM (ver Tabla A).
VisProIREXX, dispone de algunosobjetos realmente interesantes. En elapartado de multimedia hay que destacar el MMPM Video Object que nospermite visualizar un vídeo dentro decualquier caja de diálogo que diseñemos. Además tenemos control sobreel vídeo. Podemos hacer una pausa,rebobinar, aumentar o disminuir elvolumen o, simplemente, pararlo.También hay que agradecer a Hockware que nos haya incluido el CircularSlider, utilísimo para el control devolumen.
En el apartado de gráficos, VisProlREXX nos obsequia con un nuevo
siSíSísíNosisíSísíSíSí
. SíSíSíSíNosísíSísíSísíNoSíSíSísíSÍ-
Business GrapbicCircular SliderColor Selectorco!8bo BoxConnectionContainer~Check ButtonCheck Button 3 statesDDE CHentEntry FiéldFree Form EntryGraphicGroup Boxlmage Editorlmage PushButtonlmage Radio ButtonList Box~M/2 VideoObject~Multy Line EntryNotebookPatternSelectorPush ButtonQueryRadio ButtonSliderSpin ButtonTextValue Set
RPP NQ 16
33
HERRAMIENTAS OS/2
1
_~,_I
Figura K Ejemplo de uso delos objetos Color Selector yPatlern Selector en VisPro/REXX
tos, editor de menús, menús emergentes, ayuda interactiva medianteconexiones a help, posibilidad de activar una línea de información, editor derecursos, capacidades multithread,depurador, acceso a bases de datos,etc. Las diferencias se establecen, quizá,en las posibilidades que presentan estascapacidades. Así, el depurador deVisPro/REXX permite el seguimientode los distintos threads de las aplicaciones. No se ha observado esta capacidad en el depurador de VX-REXX.
Uno de los aspectos que más estáncuidando últimamente los desarrolladores es la interfaz con las bases dedatos. Tanto Hockware comoWatcom han apostado por ello y nosofrecen dos buenas soluciones aunquecon aproximaciones distintas.
VX-REXX nos ofrece una aproximación más clásica presentándonosen un container el conjunto de tablas
tllabilSé e.eted w lOOts~"",Jj""-----"'T~
',o
"-'
Figura L Aspecto del VX-REXXChart Editor
Ambos productos ofrecen una seriede capacidades destacables: Controlde Drag & Drop para todos los obje-
FQr!PatOÉ! soportados: BMP (OS 12 y wínqows 3. O) ,TÚ;, PCX, GIl',~ruevision TargalVista,bitmap,Amiga IFF ! TLBM 1nterleaved bit.map.
, YUV12C 14-Mocion Frame ,i;luffer, IBM K1PS',!8M rma-geAccess executive, X' ~lindows bitmap,Archimedes Sprire format from RiBCOS,IBM Printer pag~ Segmento '
Accioriesi Capturador de pantallasConversión a,. blanco y 'negroImp"resiónen blanco y negro O ~olor en tpread~parte
Importación-Exportación a (-dEl)' U;dós' 'los fonnatosgráficos soportados. ' . ..
. ,. Posibilida 'de copiar y pegar desde' el clipboard,Posibilidad de recortar la imagen (crop)Obtener atributos de una imagenRotar la imagenEscalar la imagenÜtilizar hasta 14 herramientas para rnanipul,ir 1,'"imagenEtc.
objeto en su verSlOn 3.0: elImage Editor. Este objeto es,tal como su nombre indica, uneditor de imágenes que se integra como cualquier otro objeto en nuestras aplicaciones.Tenemos un buen ejemplo dela potencia de este objeto en laaplicación VisPro Paint que seincluye en el producto. LaFigura Jnos muestra el aspecto de esta aplicación y la TablaB nos indica algunas de susposibilidades.
También en el apartado deimágenes VisP1"O/REXX incluye dos objetos interesantes: elColor Selector, un objeto quenos permite seleccionar fácilmente un color, y el PatternSelector, que nos permite seleccionar una trama. La Figura Knos muestra el aspecto de estosobjetos. Por otra parte, caberemarcar el editor de gráficosde negocios de VX-REXX. Esrealmente magnífico tanto porsu sencillez como por el abanico de moda lidades gráficas quepresenta. Las acciones disponibles para cada objeto, tambiénson similares. VisPro/REXX ofrece,además, la posibilidad de enviar cualquier mensaje PM a un objeto.
RPP NQ 16
34
de una base de datos (Figura N). Lainformación de cada tabla se nos presenta en un Notebook (Figura O).
VisPro/REXX opta por una aproximación gráfica (Figura M). Nos presenta las' tablas con su estructura y susenlaces;~ Para obtener más datos deuna tabla, hacemos doble dic en ellay nos aparece un notebook con lainformación detallada de su estructura. El mismo entorno gráfico nos sirvepara diseñar nuestras propias basesde datos. Una vez diseñada la base dedatos, podemos exportar su defini-
ción a una DDL Macro o a una DDL.La DDL Macro consiste en un CMDque contiene las instrucciones necesarias para crear la base de datos, sustablas y las relaciones entre las tablastal y como la hemos definido gráficamente (listado 1). Una DDL no esmás que elcQnjunto de instruccionesnecesarias para crear la base de datos(Listado 2). Y~Pro Database Designerpermite también exportar el esquemavisual de la base de datos al portapapeles o a un archivo Metafile. Estafacilidad es re<ilmeme práctica si tene-
HERRAMIENTAS OS/2
mos que generar documentación sobrela estructura de una base de datos.
También dispone de un generadorde consultas guiado que resulta bastante práctico y que aprovecha la información de las tablas que hayamosseleccionado. Hay que hacer notarque Watcom exige que se haga unbind a cada base de datos que queramos utilizar con VX-REXX. Esto noes necesario con VisPro/REXX.
La manera como se integra una basede datos con la aplicación a desarrollar, también difiere. Watcom obliga
/* .re~iistéi the rexxfun,ctions */
R"riiri'5€'.¡¡"lSilBI_Iil'
IVLAOM.COLU"'tS IVLAOM..T ABlES ZCCBFRA.AULES
ZCC8fRA.CErnRES ZCCBFRA.DIVISlOttS ZCCBFRA.ENTORKS
call sqlexec 'EXECUTE I~¡EDIATE :prep~string'
rc ; .rxfW1caddl 'SQLDES' ,'SOLAR', 'SQLDBS');rc ; i"founcaqdl 'SQLEXEC', 'SQLAR', 'SQrJEXEC' };'
ca11 •sqldbs .' CREATEDATABASE EJEM.PLO'i f SQLeA .SQLCQDE<> ' Oc then do
'say' SQLeA.. SQLCODE SQLCA. SQLMSGcaÜ sqldbs 's'rop USING DATABl'SE'say 'Press Enter to continue'puÜ"exi·t 1
endcal1 sqldbs 'START USING DATABAS E E,J.EMPLO'-·ir SQLCA.SQLCODE <> O then do
say SQLCA. SQLCODE SQLCA. SQLl-1SGcall sqldbs 'STOP USINGDATABASE'say 'Press Encer"to: coneinue'pull'exit 1
endprep_str1.11g· ; 'DROP TABLE IDUSUAR. PERSONAL'
prep_st"ing ~
-¡CODIGONOMBREDEPARTA'CARGO
.PRIMARY KEY') ,
'CREATE ·TABLE IDOSUAR.PERSONAL',INTeger NOT NULL, ' ,VARCHAR (50) NÓ'rNULL;',INTeger NOT ~ruLL, ' ,INTeger NOT NULL,',
(CODIGO) '.-
1EIZCCBFRA.HAROSOFT ZCCBFRA.PROVEIDORS ZCCBFRA..RE.SPAULES
@IZCCBFRA,VAUlES
Figura N VX-REXX DatabaseAdministrator: Lista de tablas deuna base de datas
X'
~.j
call sq1exec 'EXECUTE IM!~EDIA'l'E :ptep_string',
r... (
prep_string ; 'ALTER TABLE IDUSUAR.PERSONAL',FOREIGN ·KEY (DEPARTA)',. 'REFERENCES IDUSUAR. DEPARTA' ,FOREIGN KEY (CARGO)',
'REFERENCES IDUSUAR.CARGOS'
call sqlexec • EXECUTE I~EDIATE : prep_st:ring'
ir SQLCA.SQLCODE <> o then dosaY·SQLCA.SQLCODE SQLCA.SQLMSGcal r sq:\cdbs 'STOP USING DATABASE~
say ,p,:ress: Enter to cont inuc'yullexit l'
'end
RPP NQ 16
35
Figura O VX-REXXDatabase Administrator:Coracterísticas de una tabla
1~ ~1tI«tl:d.y- I~
~ ~ h~===_=_=",.-s...=.';:¿;;o::::------- :;!~
; =:~:~ 1;"'" CX:lNvOCWod'>lltlo·~1<.eys ,.....,$1 CON'IOO,~ AOO~ COtNOCW"Ó'll".f" ,."., CHQ'>l ro~, ~HoIIId·~I"8_ltISI.J¡I.,¡JTu.oo ADO5~ COtI"'OC\VoiPrIorForrn_'-~ AlX)S5 c:::oN\'OC\Vi~Paa-f-'lJfm_-ÜIMlf*l Q1IJ:S$ O'JN\I'lXWOlI"rMr-F _.CI\MoIIIl 01G
L
Figura P Aspecto del TeamAdministrator
HERRAMIENTAS OS/2
CREATE lNDEX XlPERSONAL-0N IDUSUAR, PERSONA,L (NOHBRE -ASC)
DROP'TABLE PERSONAL
DROP TABLE DEPARTA '
CREATE','TABbE IDUS(JAR, PERSONAL
REXX y VX-REXX: La interfaz deusuario y la generación de ejecutables.
Mi opinión es que la interfaz deusuario es más coherente y más sencilla en el caso de VisPro/REXX.Mientras VX-REXX no nos muestracomo objetos aparte cada ventana,VisPro/REXX nos presenta cada formcomo un objeto en la carpeta de proyectos. La sintaxis de VisPro/REXXtambién me parece más clara.
En cuanto a la generación de ejecutables, VX-REXX exige la presencia de una DLL runtime de unas 900KB. Con VisPro/REXX, podemosoptar por entregar al cliente un sojaejecutable o un ejecutable y una DLLruntime (en este caso la DLL ocupa191 KB.
Por todo ello, mi opción ha sido lade utilizar VisPro/REXX, sin dejar deestar atento a un producto realmentemagnífico como VX-REXX.
INTeger NOT NULL •VARCHAR(50) NOT NULL,INTeger NOT NULL,INTeger NOT NULL,
(cmüGO. NOMBRE
DEPARTACARGO
PRIM.'\.I,<Y KEY (CODIGO),FORE;J:GN" KEY (DEPARTA)
REFERENCESDEPARTA.FOREIGN KEY (CARGO)
REFERENCESCARGOS),',
CREATE TABLEIDUSUAR,DEPARrÁ(CODIGO" . INTeger NOT NUbL,:NOMBRE VARCHAR(lOOj,NOT NUbL,DIRECTOR, INTeger NOT' NULL, .LOCALIDAD VARCHAR(50) 'NOTNULL;
PRÚlllRY KEY ¡CODIGO), -FOREIGN kEY (DIRECTOR)
. 'REFERENCES PERSONAL)'
CREATE INDEX XlDEPi\RTAON -IDQSUAR,DEI'I\RTA (NOMBRE ASC}
CREATE TNDEX X,léARGOS ON iDUSlJAR.CARGOS' (CARQO ASC)
CREATE. INDEX X2tiEPARTA ON: 'IDUSUAR, DEPARTA. (LOCALIDAD'AS,C j: e ,
, DRO-P "TABLE CARGOS i:
éREATE TABLE IDUSUAR,cARGOS. (CODIGO INTeger, NOT"NiJLL,
CARGO VARCHAIl (100) 'NOT.NULL,PRIMZl-RYKEY ¡COOlGO))
Shadow del menú emergente de unicono de formo
Las sombras de forms difieren delas de WPS en algo fundamental.Mientras las de WPS no tienen representación en el sistema de archivospor almacenarse en el archivoOS2.lNI, las de VisPro/REXX sondirectorios en un proyecto. Un archivo llamado !!LINK existe en el directorio de la form original. Esto previene la pérdida de la estructura delproyecto debido a cambios en losarchivos de sistema de OS/2 y mejora la fiabilidad sobre la implementación de las sombras en OS/2.
Las sombras de forms se crean pordefecto como objetos de sólo lectura.Para cambiar este atributo, hay queseleccionar Read only en el menúemergente de la formo
Más arriba hemos hablado de dosgrandes diferencias entre Vis Pro/
~- ------I ...."'LAUU 2.- Fragmento d~ una DDL generada por el VisP~o Datobase Designer
a incluir dos objetos en la caja de diálogo. Uno de conexión y otro de interrogación. A partir del de interrogación, en el que habremos especificadonuestra consulta, se nos generan losobjetos del panel que ha de acceder ala base de datos. VisPro/REXX opta,una vez más, por una solución visual.Arrastrando una o más tablas desdeel Database Designer hasta una form(panel, ventana, caja de diálogo), senos generan los objetos necesariospara el acceso a las tablas y el códigoREXX correspondiente.
Hay también dos utilidades interesantes que nos ofrece VisPro/REXXy que no encontramos en VX-REXX:El Help Editor y el TeamAdministrator. El Help Editor, comosu nombre indica, es editor de archivos IPF. Es bastante completo y permite compilar los archivos en formato HLP yen formato INF.
El Team Administrator permite alos desarrolladores comparar los niveles de cambio y las versiones de unproyecto de manera sencilla y clara.Permite deshacer un cambio y monitorizar los progresos del desarrollo.Todos los cambios se almacenan automáticamente y las forms pueden serbloqueadas para asegurarse de quesólo un programador las modifica ala vez. También incluye la posibilidad de ver una form en modalidad de"sólo lectura" y la creación de sombras de forms para facilitar el accesoen un entorno de sistema distribuido.
VisPro/REXX incorpora en su versión 3.0 el nuevo concepto de Sombrasde Forms. Las sombras de forms sonsimilares a las sombras de WPS. Tepermiten incluir una form deVisPro/REXX en otra carpeta de proyecto. La form original puede estarlocal en tu máquina o en un servidorremoto. Esto permite compartir formsde uso común en diversos proyectos.
Las sombras de forms se crean dela misma manera que las de WPS.Podemos arrastrar una form a unanueva carpeta de proyecto manteniendo pulsad'as las teclas[Ctrl]+[Mayús] o seleccionar Create
RPP Nº 16
36
Top Related