UNIVERSIDAD AUTONOMA
METROPOLITANA
Unidad Iztapalapa
Proyecto Terminal
División: CBI
Carrera: Licenciatura en Computación
Asesor:
Ing. Jorge Lozano Moreno
Constancia
de
finalización
de
Proyecto
Terminal
Por medio de este conducto hago de su conocimiento que Miguel Angel Uribe Becerra, alumno de la
Lic. en Computación en la Universidad Autónoma Metropolitana, finalizó bajo mi asesoría su Proyecto Terminal, requisito indispensable para la titulación, el cual consistió en lo siguiente:
Se diseñó una Herramienta CASE sobre plataforma UNIX y X Window System que permite diseñar el
“front end” para una aplicación. Una vez efectuado el diseño, la herramienta es capaz de generar su
código en lenguaje C. Esta herramienta CASE fue desarrollada sobre el administrador de ventanas
OSFhlotif, para el sistema operativo Solaris 2.3 en una estación de trabajo Sun SPARCStation 2.
La finalidad de la herramienta es brindar a los programadores un CASE que facilite la creación de sistemas bajo X1 l . El programador, dentro de una úrea de diseño, se encargará únicamente de colocar las ventanas, botones, menús, cuadros de texto, cuadros de dialogo, etc. a través de la barra de herramientas que proporciona el CASE y finalmente seleccionará la generación de código, con lo cual creará un archivo que contendrá el código fuente en C del “fiont end”, listo para ser modificado al gusto del
programador, o para enlazarlo a órdenes de manejo de bases de datos, comunicaciones, etc.
Considero de gran utilidad a esta herramienta, pues el programador deja de preocuparse del diseño de widgets dentro del desarrollo de sistemas, además de que la experiencia de desarrollo de este tipo de herramientas en México es casi inexistente, aun cuando en otros países es un recurso habitual para todo programador y desarrollador de sistemas.
El presente trabajo proporciona una herramienta con la cual los programadores podrán llagar a utilizar el
sistema X Window bajo plataformas UNIX para desarrollar interfases gráficas de usuario. Se introduce
con detalle la programación X Window, las herramientas Xt Intrinsics y la herramienta en propiedad OSF/Motif. Además, se proporciona los componentes y caracteristicas necesarios acerca del sistema operativo UNIX con la finalidad de apoyar al desarrollador en la construcción de interfases gráficas.
Sin más por el momento, me despido de usted, esperando le sea útil el presente trabajo.
Atentamente
Contenido
Contenido
Capítulo 1
.
Introducción al Sistema
El Sistema
X
Window ... 1 Historia y necesidad ... 2 Dispositivos fisicos (Hardware)...
Software ...
Otros sistemas de ventanas ...
Arquitectura Cliente/Servidor
...
Historia
y
objetivos ...Implementaciones ...
Analogías
y
diferencias...
Puntos clave ... ¿ En qué consiste el sistema X Window ?...
El sistemaX
Window...
Hardware ...Conexiones ...
Software ...
Interfases gráficas de usuario
...
Arquitectura Cliente/Servidor...
Capítulo
2
.
El programa
“Hola Mundo
”Funciones
X
Window ...Examen del programa “Hola Mundo”
...
Inclusión de los archivos de cabecera
...
Declaraciones ...Establecimiento de la conexión
...
Creación de una ventana
...
Notificación a las demás aplicaciones ... Creación de
un
contexto gráfico ...Selección del tipo de suceso de entrada a procesar
...
Visualización de ventanas...
Terminación del programa
...
Código fuente del programa “Hola Mundo”
...
Puntos clave ...El
primer programa...
Funciones de un programa X Window...
Ejecución del bucle principal...
Modificaciones posibles ...
Modificaciones posibles
...
Contenido
Capítulo
3
.
Conceptos básicos y terminología
El protocolo X ... 29
Peticiones y formato de petlclon
...
30Respuestas y formato de respuestas
...
31Formato de Suceso
...
32Archivos de cabecera ... 33
Nomenclatura Xlib
y
convenios para los argumentos...
34Recursos
...
35Contextos gráficos
...
36Tipos de letra (Fonts) ... 37
Mapas de colores (Colormaps)
...
38Sucesos ... 38
Tipos de sucesos ... 39
Estructura de sucesos
...
45Máscaras de sucesos ... 46
Puntos clave ... 48
Protocolo X ... 48
. . .
Erroresy
formato de errores...
31Archivos de cabecera estándar
...
33Ventanas ... 35
Cursores ... 37
Mapas de puntos (pixmap)
...
38~ Peticiones ... Respuestas ... Errores ... Formato de sucesos ... Archivos de cabecera estándar
...
Recursos ... Ventanas ... Nomenclatura Xlib y convenios para los argumentos...
48 48 48 48 48 49 49 49 Contextos gráficos ... 49Tipos de letra ... 49
Cursores ... 49
Mapas de colores ... 49
Mapas de puntos ... 50
Tipos de Sucesos ... 50
Sucesos ... 50
Capítulo
4
.
Ventanas y técnicas de trabajo con ventanas
Conceptos básicos ...51
Terminología básica ...
53
Características propias de las ventanas
...
60Atributos de las ventanas
...
61Ciclo de vida de las ventanas ... 64
Analogía del escritorio
...
52Características de las ventanas ... 59
Contenido
Contenido
Ejemplo 2: Revisión del programa Hola Mundo
...
93Paso 2: Incluir un archivo de cabecera público
...
93Paso 3: Inicializar el programa y la caja de herramientas
...
93Paso 5: Regisbar llamadas de retorno. acciones y gestores de sucesos
...
94InicializaciÓn de la caja de herramientas y h c i o n e s relacionadas ... 95
Inicializaclon por omlslón ... 95
InicializaciÓn de 10s elementos internos de la caja de herramientas
...
96Manejo de la visualización ... 97
Creación del widget Shell (de interfaz) inicial
...
98Salida de las aplicaciones ... 99
Widgets ... 99
Ciclo de vida del widget ... 100
Recursos ... 103
Orden de especificación de recursos ... 103
Convenios de nomenclatura de los recursos ... 104
Caracteres comodines en la especificación de recursos
...
104. .
. .
Los widgets Shell ... 103Archivos de recursos ... 106
Recursos del widget Core (núcleo) ... 106
Llamadas de retorno ... 109
Recursos de 10s widgets Composite (compuestos)
...
108Codificación de los procedimientos de llamadas de retorno
...
109Adición y eliminación de llamadas de retorno ... 109
Ejemplo 3: Un programa que utiliza el widget RowColumn ... 111
Ejemplo 4: Un programa que utiliza varios widgets
...
113Ejemplo 5 : Programa con menú de ayuda dinámico
...
116puntos clave ... 122
Programadores de la caja de herramientas ... 122
Arbol de widgets ... 122
Widgets dinámicos (popus) ... 115
Especificación de recursos de todos los ejemplos
...
120El papel de la caja de herramientas
...
122Clases de widgets ... 122
Las aplicaciones Motif ... 122
Recursos ... 123
Ciclo de vida de los widgets ... 122
Llamadas de retorno ... 123
Widgets dinámicos ... 123
Capítulo 6
.
Introducción al sistema UNIX
Diferentes versiones de Unix ... 124Conceptos elementales sobre sistemas operativos
...
124Sistemas de un solo usuario ... 124
Sistemas de varios usuarios ... 125
Sistemas de multiproceso ... 125
Capitulo 7. Principios
básicos
Sistema de almacenamiento ... 126Órdenes ... 126
Archivos temporales ... 127
Contenido
...
Usuarios 128
Administración ... 128
Dispositivos ... 130
Otros directorios y archivos ... 130
Capítulo 8
.
Encendido y apagado del sistema
Encendido ... 131Apagado ... 132
Capítulo
9
.
Conexión desconexión de usuarios
Conexión (logging-in) ... 134Desconexión (logging-out) ... 135
Capítulo IO
.
Shell
Shell ... 136Capítulo
II
.
Control de usuarios en el sistema
Creación de un usuario ... 137Eliminación de un usuario ... 137
Grupos ... 138
Capítulo
I2
.
Dispositivos
Agregar un dispositivo a Unix ... 139Dispositivos estructurados por bloques (sistemas de archivos)
...
140Dispositivos crudos y estructurados por bloques
...
140Dispositivos de caracteres ... 140
Capítulo
I3
.
Sistemas de archivos y
su
mantenimiento
Respaldo y recuperación de discos ... 142Las órdenes dump y resto ... 142
La orden tar ... 143
La orden dd ... 143
Transferencia de archivos entre sistemas
...
143La orden du ... 144
La orden quot ... 144
La orden df ... 144
El bit SUID (super user id) ... 144
El bit pegajoso (sticky bit) ... 145
Sistema de archivos ... 145
Estructura del disco ... 145
Directorios ... 145
Ocupación y uso del sistema de almacenamiento
...
144Bits especiales de acceso a los archivos ... 144
Contenido
Dispositivos de disco por bloques y crudos
...
146Otras órdenes de mantenimiento del sistema de archivos
...
146Las órdenes mount y m o u n t ... 146
... Banco de buffers 146
Capitulo 14
.
Consideraciones de rendimiento
Órdenes estándares ... 148Orden iostat ... 148
Orden sa ... 148
Orden ac ... 149
Consideraciones generales del rendimiento del disco ... 149
Capítulo
15
.
Seguridad
en los
sistemas Unix
Permisos sobre archivos ... 150Acceso a los dispositivos ... 150
Otros puntos ... 151
Capitulo 16
.
Algunas órdenes importantes para
los
administradores
Orden make ... 152Sistema de control de código fuente ... 152
awk ... 153
Introducción
Introducción
X Window crea ventanas. Se trata de la herramienta de software para el desarrollo de interfases gráficas
de usuario (GUIs) sobre estaciones de trabajo. X Window es para los sistemas UNM lo que es Windows
para los sistemas MS-DOS, pero con una diferencia importante: los sistemas X Window son un estándar
aceptado por la industria para los sistemas de ventanas en UNE. Esta estandarización tiene
consecuencias de gran alcance: las interfases gráficas de usuario desarrolladas para una computadora se pueden ejecutar en computadoras completamente diferentes. Los sistemas X Window proporcionan una salida común para estaciones de trabajo, grandes computadoras, minicomputadoras y microcomputadoras conectadas en red.
La bajada continua en los precios de las microcomputadoras ha colocado a los sistemas X Window al
alcance de literalmente millones de usuarios de computadoras. Todos los programas que aparecen en este
trabajo se han desarrollado y probado en una estación de trabajo Sun SPARCStation. El sistema operativo
usado, basado en el UNESystem V, y desarrollado por el líder de la industria UNIX sobre computadoras
personales, fue el SCO Open Desktop personal System, con el sistema de desarrollo Open Desktop Development System. El software de desarrollo incluye X Window, con la herramienta OSFMotif y el lenguaje de programación C. El uso de sistemas de desarrollo alternativos como el recientemente lanzado entorno multitarea DESQviewK de Quarterdeck Office System puede reducir los requisitos de hardware.
Las aplicaciones X Window se pueden ejecutar en PC con procesadores 486 y superiores.
Este trabajo está dividido en dos secciones. En la primera sección, compuesta por cinco capítulos, se introduce con detalle la programación X Window, las herramientas Xt Intrinsics y la herramienta en
propiedad OSFMotif. Se incluyen varios programas que son detalladamente analizados.
La segunda sección incluye 11 capítulos que están dedicados al Sistema Operativo. El sistema UNEha
Introduccidn al Sistema X Window
Capítulo 1
Introducción
al
sistema X
Window
Bienvenidos al sistema X Window (también llamado X Window y en otras ocasiones, aunque
erróneamente X Windows). En los últimos años este sistema se ha convertido en un estándar para el desarrollo de interfases gráficas de usuario en estaciones de trabajo (graphics user interfaces on
workstations). Una interfaz gráfka de usuario (GUI) se puede definir brevemente como una interfaz computadordusúario que se ejecuta en modo gráfico. Las estaciones de trabajo son computadoras de
sobremesa con capacidades gráficas y de computación más potentes que las microcomputadoras de gama
alta.
Debido a la independencia de dispositivo de X Window, las interfases gráficas de usuario desarrolladas
sobre una computadora, se pueden ejecutar en distintas computadoras. Los sistemas X Window
fi-ecuentemente proporcionan una salida común para estaciones de trabajo, grandes sistemas
(mainffames), minicomputadoras y microcomputadoras conectados en red. Antes de examinar
atentamente los sistemas X Window, consideremos la necesidad de los sistemas de ventanas y de las interfases gráficas de usuario (GUls, abreviatura de Graphical User Interface).
Cada avance apreciable en el hardware de las computadoras ha significado un progreso significativo en la forma en la que los usuarios finales y los especialistas interactúan con las computadoras, redundando todo
ello en una forma de trabajo más cómoda y productiva.
Algunas personas aún recuerdan los años de las tarjetas perforadas, años cincuenta, sesenta y principios de los setenta. En aquella época, la mayor parte de las personas no cualificadas se veían forzadas a elegir entre dos opciones poco satisfactorias: usar solamente unos pocos programas de computadora o depender
de especialistas que les ayudasen a acceder a los datos que necesitaban. Los programadores se
consideraban afortunados si podían probar un programa tres o cuatro veces al día. Las salidas estándar constaban de líneas variadas en las que tan sólo había números y letras, todas en mayúscula.
Gradualmente, los terminales de rayos catódicos (CRT) reemplazaron a las tarjetas perforadas y a las lectoras de tarjetas. Grupos cada vez mayores de usuarios utilizaban los terminales para visualizar la información contenida en las grandes computadoras centrales situadas en la habitación contigua o en cualquier punto del continente. Los programadores podían desarrollar programas y probarlos de forma
interactiva, dialogando con la computadora. Las utilidades de salida avanzaron también. El poder
visualizar los resultados no seguía significando el tener que ir hasta la impresora. La mayoría de los terminales ofiecían nuevas posibilidades como, por ejemplo, las letras minúsculas. Pero como decía Henry Ford, con un terminal CRT estándar se puede tener cualquier tipo de letra siempre y cuando sea de "Computadoraf'. Incluso hoy en día, muchos de los terminales conectados a grandes computadoras no pueden generar graficos.
Los efectos de la revolución de las microcomputadoras nos rodean. ¿Quién no ha visto deslumbrantes pantallas y llamativos folletos impresos con computadoras relativamente baratas? Los éxitos de esta revolución han creado nuevos problemas. Durante mucho tiempo los usuarios de las microcomputadoras compatibles IBM sufrieron la dificultad de la transferencia de archivos de un formato a otro. Los conocimientos adquiridos en el manejo de la función de impresión de las hojas de cálculo han sido, hasta
Introduccidn al Sistema X Window
En realidad, cambiar de procesador de texto significaba tener que aprender de nuevo los modos de impresión.
Los diseñadores de software también han sufrido las consecuencias de los problemas de compatibilidad. El software gráfico es dificil de escribir y de depurar. Un programa que dibuje una línea en la pantalla debe manejar dos dispositivos separados pero relacionados: el controlador de video y el monitor. Un programa escrito para un estándar gráfico compatible IBM, no funcionará correctamente si se usan otros estándares gráficos en la misma computadora. Transformar programas gráficos para ejecutarlos en un Macintosh, una estación de trabajo o una gran computadora, genera más problemas que resultados.
Las microcomputadoras compatibles IBM más antiguas usan gráficos Hércules (monocromo) o CGA
(color). En 1987, IBM introdujo la línea de computadoras Psi2 equipadas con gráficos VGA, que en gran medida han ido reemplazando a Hércules, CGA y a otro estándar gráfico de IBM llamado EGA. Desde principios de los noventa VGA se ha convertido en el estándar gráfico de base para los compatibles IBM.
La mayor resolución disponible con VGA es de 640 x 480, una pantalla se divide en 640 líneas horizontales de 480 puntos cada una, dando a un punto direccionable el nombre depixel. Son comunes los
sistemas gráficos capaces de manejar una resolución de 800
x
600 puntos, siendo conocidosfi-ecuentemente como Super VGA, o VGA Extendida (Extended VGA) pero ni la nomenclatura ni las
especificaciones técnicas son estándar. Existen dos estándares distintos para los sistemas gráficos de 1024
x 768 puntos, usados normalmente en el diseño asistido por computadora y en los sistemas de
autoedición. Al escribir esto existe una barrera en el precio para una resolución superior a la de 1024 x 768. Los sistemas con mayor resolución son relativamente caros y no son estándar. Por otro lado, la
resolución típica en una estación de trabajo es de 1 152 x 900, siendo normales resoluciones mayores.
Los diseñadores de los programas gráficos tradicionales están siempre contando puntos (pixels), miles de puntos, y además deben estar familiarizados con códigos arbitrarios para los patrones y colores. Transportar una aplicación gráfica de una computadora a otra puede durar meses. Lo mismo que el sistema de video Beta perdió su participación en el mercado frente al sistema VHS tecnológicamente inferior, las microcomputadoras Rainbow de Digital Equipment Corporation y las Professional de Texas Instruments no pudieron competir con los compatibles IBM, en buena parte debido a los diferentes estándares gráficos. El sistema X Window se dirige hacia la resolución de estos problemas.
El sistema X Window
El sistema X Window se ha convertido en un estándar de los sistemas de ventanas independiente del hardware y de los sistemas operativos. Es una utilidad para desarrollar sistemas gráficos de alta
resolución tanto en monocromo como en color. En la Figura 1-1 se muestra un esquema de este sistema.
Historia y necesidad
En 1984, el Laboratory for Computer Science del Instituto Tecnológico de Massachusetts (MIT) en Cambridge, Massachusetts, inició el proyecto Athena encabezado por Robert Scheifer y Jim Gettys. Como otras muchas organizaciones, tanto mercantiles como publicas, el MIT utiliza gran variedad de CPUs, terminales, y sistemas operativos. El proyecto Athena tenia una meta muy concreta, los programas deberían estar disponibles interactivamente para los usuarios sobre cualquier estación, en cualquier lugar del campus. El punto de partida fue el sistema de ventanas de la Universidad de Stanford denominado W.
Inicialmente el sistema X Window estuvo disponible para los diseñadores en el año 1986, con la versión 10.4. Los grandes fabricantes de computadoras. incluyendo a Digital Equipment Corporation (DEC),
International Busiess Machines (IBM), American Telephone and Telegraph (AT&T), Sun Microsystems,
Introducción al Sistema X Window
Window se ha actualizado continuamente, y en este momento la versión más reciente es la
x1
1R5 (Versión 11 edición 5).sistema en
tower
( U C P , disco
Cinta)
Ventam LOGIN
Estacmn de trabajo &&a
I
R3tIj.n
I
-
Teclado
E-
l
I
1
I
computadora
x
Computadora Y Conputadora Z computadoraw
Figura 1-1. Sistema X Window
Dispositivos fisicos
(Hardware)
Los sistemas X Window pueden ejecutarse sobre distintos dispositivos fisicos. La unidad de salida es una pantalla gráfica, cuya resolución al menos es la de VGA. Los dispositivos de entrada más comunes son el teclado y el ratón. Otras unidades de entrada son la bola de tracción, la tableta digitalizadora y la pantalla táctil.
Estaciones de trabajo
La inmensa mayoría de los fabricantes de estaciones de trabajo soportan los sistemas X Window. La
importancia de este mercado es tal que hasta diciembre de 1991 una sola compaiGa, Sun Microsystem,
había vendido casi medio millón de estaciones de trabajo. La continua bajada de los precios de las estaciones de trabajo y el aumento de las necesidades de computación de los grupos y de los individuos significó una ampliación del ámbito de uso de las estaciones de trabajo y, por consiguiente, de los
sistemas X Window.
Terminales X
La mayoría de las organizaciones no pueden permitirse el lujo de gastar 5.000 dólares o más en equipar cada despacho con una estación de trabajo completa. Una alternativa cada vez más utilizada es un Terminal X, que es un terminal gráfico s i n disco en el que se ejecuta un Único programa, el programa
Introducción al Sistema X Window
La rápida expansión del mercado X Window ha permitido el desarrollo de una amplia variedad de Terminales X, algunos de los cuales compiten con las estaciones de trabajo en memoria y CPU. Como estos Terminales X no tienen disco, son más baratos que las estaciones de trabajo equivalentes.
Otras de las ventajas de los Terminales X es el reducido mantenimiento del hardware y del software
comparado con el de las estaciones de trabajo en las que se ejecutan sistemas X Window. Los Terminales
X ofiecen un mayor control por parte del departamento de informática y permiten aprovechar la inversión realizada en grandes computadoras (mainframes).
Los Terminales X tienen potenciales desventajas, no pueden procesar datos donde y cuando son generados, y los modelos inferiores tienden a ser muy lentos. Bajo un punto de vista critico, los Terminales X representan un paso atrás hacia el mundo del tiempo compartido (Time Sharing).
Microcornputadoras
La cuestión estriba en: “Si los sistemas X Window son tan potentes, ¿podremos usarlos en nuestras microcomputadoras?”. La respuesta es “depende”.
Un requisito claro es la alta resolución gráfica, de forma que es preferible Super VGA a VGA o Hercules.
Las necesidades de procesamiento pueden hacer demasiado baja la resolución de 1024 x 768. El color es
una cuestión opcional, pero si lo elegimos, debemos asegurarnos que los colores sean atractivos y variados. (Los usuarios actuales tienden a considerar los 16 colores un poco aburridos.)
El procesador mínimo es un 80486 o su equivalente (por ejemplo un 68030). (Los usuarios de AT pacientes pueden encontrar el tiempo de espera aceptable para gráficos simples.) Es absolutamente necesario disponer de un disco fijo grande y rápido. El sistema X Window no es como el DOS, no se haga la idea de poder confinarlo en un rincón de su disco fijo de 40 megabytes (Mb). Al menos hemos de
dedicar un disco fijo de 500 Mb al sistema X Window y su entorno, UNEincluido. Estudie sus manuales
para determinar la configuración necesaria para su implementación del sistema X Window y las utilidades que necesite.
Como se trata detalladamente en este capítulo, los sistemas X Window incluyen dos tareas: ejecutar la aplicación de usuario y manejar gráficos. A menos de que disponga de un auténtico sistema operativo multitarea, su microcomputadora no podrá atender a la aplicación de usuario y a los gráficos. Una
microcomputadora aislada con sistema operativo DOS tan sólo puede gestionar una de estas dos tareas,
pero no ambas.
UNIX y otros sistemas operativos multitarea con fiecuencia controlan grandes microcomputadoras. Por ejemplo, el Open Desktop de Santa Cruz Operation, mostrado en la Figura 1-2, se ha convertido en el
sistema operativo UNE estándar de las microcomputadoras de gama alta. Este paquete proporciona por
completo todas las capacidades X Window. Podemos contar con que en el futuro muchos paquetes para
grandes microcomputadoras soportarán parcial o totalmente X Window.
Todos los ejemplos que se darán más adelante, se han desarrollado sobre una microcomputadora
compatible IBM 586066 MHz con un monitor color gráfico de 1024 x 768, ejecutando el SCO Open
Desktop Personal System Versión 2 con el Open Desktop Development System. El software utilizado
incluía UNIX System V, X Window versión 11.4, con la utilidad OSFMotif y el lenguaje de
programación C. No se preocupe, ya que el uso de un equipo o una implementación de X Window
Introducción al Sistema X Window
Arquitectura Cliente/Servidor
El corazón de la filosofía X Window es la arquitectura clientehervidor. Esta arquitectura es el modelo del sistema X Window, mediante la que los clientes, o programas de aplicación, comunican con los
servidores, o unidades de visualización a través de una red local. En la Figura 1-3 se muestra la
arquitectura clientehewidor. En esta sección se examinan detalladamente los componentes de la
arquitectura cliente/servidor de X Window y se compara esta arquitectura con el modelo clientehervidor para otros sistemas informáticos.
Figura 1-2. Las ventanas de SCO Open Desktop
f
_ _ ~ ~Estación de trabaj o g r á f b como servidor X
I I
aora con cnemes A I
Introducción al Sistema X Window
Cliente
Básicamente el cliente es el programa de aplicación. A diferencia de los programas gráficos tradicionales, los clientes X Window no se comunican directamente con el usuario. El cliente obtiene una entrada de usuario como, por ejemplo, la pulsación de una tecla o de un botón del ratón desde el servidor que es la otra parte de la arquitectura clientehervidor. El cliente ejecuta las órdenes X Window que requiere el servidor para dibujar gráficos. Varios clientes pueden estar conectados a un único servidor.
Servidor
En términos simples, podemos decir que el servidor es la unidad de visualización, que a su vez puede estar compuesta por varias pantallas fisicas. El servidor ejecuta diversas funciones relacionadas entre sí:
Pasa la entrada de usuario a los clientes a los que está conectado. Ejemplos comunes de entradas de usuario son: el pulsar una tecla, o un botón del ratón, y el modificar la posición del puntero. Esta entrada es imprevisible, cualquier tipo de entrada puede ocurrir en cualquier orden.
Decodifica los mensajes de los clientes, como las peticiones de información o el movimiento de una o más ventanas. Estos requerimientos se expresan en un lenguaje formal X Window.
Mantienen las estructuras de datos complejas. El manejo de estas estructuras de datos por el servidor reduce las necesidades de almacenamiento y de procesamiento del cliente, y disminuye la cantidad de datos a transmitir a través de la red.
Conexión
Una parte esencial del sistema X Window es el enlace fisico entre el cliente (programa de aplicación) y el servidor (unidad de visualización). Los protocolos de red describen el formato y el orden de los datos, y
controlan los bytes que componen un mensaje enviado desde un punto a otro de la red. Los
programadores de X Window no necesitan conocer el protocolo de la red que se está usando.
Normalmente se utilizan tres protocolos para la transferencia de datos entre el servidor y los clientes. Estos son: el TCP/IP desarrollado por la Universidad de California, DECNet desarrollado por Digital Equipment Corporation, y STREAMS desarrollado por AT&T. X Window se escribió de forma que el uso de éstos y otros protocolos fueran transparentes para el usuario.
Ethernet es una tecnología de comunicaciones de redes de área local muy usada. Suministra el canal de comunicación fisico necesario entre los clientes y el servidor. Transmite datos a un promedio de 1 millón de bits por segundo. Compare esta velocidad con la normalmente utilizada en la conexión entre un terminal gráfico y una computadora central que es de 19.200 bits por segundo. El enlace X Window puede transferir datos unas 50 veces más rápido (siempre que el número de colisiones, que disminuye la velocidad de transmisión, sea bajo en la red Ethernet).
Relación con los sistemas tradicionales Cliente/Servidor
Muchas personas están familiarizadas con los términos "cliente" y "servidor", asociándolos con otros tipos de sistemas de computadoras. Por ejemplo, una red de área local almacena los archivos en un servidor de archivos, el cual centraliza la gestión de las operaciones de archivo de los usuarios (clientes). Un servidor de impresión encola las peticiones de impresión de los usuarios. En estos casos, el servidor se
localiza sobre una computadora remota cargada con muchas tareas, y el cliente es el usuario. Los sistemas
Introducción a l Sistema X Window
tradicionales sistemas clientehervidor como los sistemas X Window aplican el principio de división del trabajo al centralizar las tareas claves en el servidor, facilitando que el cliente se centre en su aplicación.
Software
Para enviar los datos adecuados y los bytes de control desde el cliente al servidor y viceversa, se necesita un software especial. En el Capítulo 2, "El programa Hola Mundo", se muestra la complejidad de la visualización de una simple ventana en la pantalla del usuario. El primer programa ejemplo tiene un tamaño de dos paginas. La flexibilidad de X Window tiene su precio.
Este texto muestra cómo programar sistemas X Windows. Se introducen los tres niveles de programación,
que van desde llamadas en lenguaje C que acceden directamente al protocolo X de la red, a paquetes comerciales parecidos a la interfaz gráfica de usuario Windows de Microsoft. En la Figura 1-4 se ilustran estos tres niveles de programación. ¿Cuál de estos tres niveles es el que deberíamos usar?. La respuesta es simple: un típico programa X Window debe usar en distinto grado los tres niveles, dependiendo de l a
naturaleza exacta de la tarea a realizar.
Aplicacinn Herramienta X
Xt htrinsics
A I I
I
Xt IntrinsicsI
I I -
I I C
Figura 1-4. Niveles de programación.
Funciones Xlib
La comunicación clientehervidor del sistema X Window se efectúa a través de un protocolo de red
denominado protocolo X (X protocol). Este protocolo X define el número exacto de bytes que se
necesitan para realizar todas las operaciones X Window, incluyendo el dibujo y movimiento de una ventana, o la reacción cuando se pulsa un botón del ratón. La programación con el protocolo X es en extremo ardua, este lenguaje de base no ofi-ece facilidades que ayuden al programador.
El protocolo X es similar al lenguaje máquina que normalmente se asocia a un determinado procesador. Pocas personas escriben programas en este lenguaje o en protocolo X, no es necesario hacerlo De la
misma manera que el lenguaje ensamblador proporciona la potencia del lenguaje máquina con mucho
Introducción al Sistema X Window
Xlib es una biblioteca de funciones que proporciona unas 300 funciones en lenguaje C usadas para generar protocolo X.
Un ejemplo de una función Xlib es XCreateSimpleWindow. A pesar de su nombre esta fimción no es
especialmente simple. Cuando utilizamos esta función en un programa X Window, el programador debe suministrarle nueve parámetros específicos que manejan valores como el tamaño de la ventana, su posición, y la anchura del borde. Las funciones Xlib son el punto inicial para aprender cómo trabaja X
Window. En el Capítulo 2 se presenta un programa X Window compuesto por funciones Xlib. Aunque es
esencial dominar las funciones Xlib para saber cómo trabaja el sistema X Window, normalmente deseará
programar con órdenes de mayor nivel usando Xt Intrinsics o ciertas herramientas (conjunto de
utilidades) en propiedad.
Xt Intrinsics
El X Toolkit Intrinsics, también conocido como Xt Intrinsics, permite a los programadores crear y usar
bloques de pantalla estándar llamados Widgets, como por ejemplo menús, barras de desplazamiento,
botones y cuadros de diálogo. Un uso cuidadoso de los widgets simplifica el proceso de programación con X Window. Quizá lo más importante es que da a la aplicación una apariencia estándar de fácil interpretación (ver y entender) y por tanto la hace más fácil de usar. Las funciones Xt Intrinsics
comienzan con la mayúscula X seguida de la minúscula t. Por ejemplo, la función XtWindow(w)
devuelve la ID (identificación) de la ventana asociada con el widget w. No adelante conclusiones al
comparar la función Xlib XCreateSimpleWindow con la función Xt Intrinsic XtWidow(w), ya que no
realizan las mismas acciones.
Herramientas en propiedad
El nivel más alto de programación para sistemas X Window es propietario. Las casas de software desarrollan sus propias utilidades como extensiones de la utilidad Xt Intrinsics. Las herramientas en propiedad incluyen características de personalización que prometen atractivas salidas, facilidad de uso, y un rápido desarrollo de aplicaciones. Un gestor de ventanas (Window manager) es un cliente especial
responsable de manipular las ventanas en la pantalla. El sistema X Window incorpora dos gestores de
ventanas: uwm y twn. Las herramientas en propiedad utilizan sus propios sistemas que son mucho más
sofisticados. En el Capítulo 4, "Ventanas y técnicas de trabajo con ventanas", se tratarán con mayor detalle los gestores de ventanas.
Cada herramienta en propiedad produce un modelo de interfaz gráfica de usuario, que permite a los diseñadores crear una serie de aplicaciones con una apariencia estándar. Se hace necesario un aviso: es necesaria una considerable destreza para producir un interfaz realmente amigable, si lo es para una única aplicación, mucho más para una serie de aplicaciones. No importa la potencia de la herramienta o utilidad, la mala programación sigue siendo mala.
El dominio de la programación X Window requiere aprender el uso de tres productos interrelacionados: Xlib, Xt Intrinsics y la herramienta en propiedad seleccionada. Igualmente importante es que el programador sepa cuándo usar cada uno de estos productos.
OSFD4otg La Open Software Foundation (OSF) es un consorcio formado en 1988 por los mayores
Introducción al Sistema X Window
Las funciones Motif comienzan con una letra mayúscula X seguida por una minúscula m. Por ejemplo, la
función XmCreateMenu sitúa un menú desplegable (temporal) en la pantalla en la posición indicada por
otra función Motif.
En este texto se presentan exclusivamente las utilidades OSFMotif. Sin embargo, es importante
familiarizarse con el software de la competencia. El proceso de selección del producto es largo y supone
importantes consecuencias para los programadores con X Window.
Open Look. El mayor competidor de OSFMotif es el interfaz gráfico de usuario Open Look, distribuido
por la American Telephone & Telegraph (AT&T) y por Sun Microsystem. La versión de Sun incluye
funciones que facilitan la conversión de aplicaciones anteriores de Sun al sistema X Window. En la Figura 1-6 se muestran ejemplos de ventanas creadas con el interfaz gráfico de usuario Open Look. En la
Tabla 1-1 se muestran los fabricantes y otras compañías que soportan las utilidades Motif y Open Look.
Otras implementaciones. Quarterdeck Office Systems, el distribuidor del más vendido programa de
gestión de memoria para MS-DOS y MS-Windows, ha presentado el DESQviewR. Este paquete está destinado a dar a las microcomputadoras de gama alta una filosofía cliente/servidor X Window para aplicaciones de red. En el mercado se encuentran disponibles potentes productos para microcornputadoras.
Introducción al Sistema X Window
Figura 1-6. Típica interfaz gráfica de usuario de Open Look. Tabla 1-1. Disponibilidad de Motif y Open Look.
Fabricante Motif IBM
Digital Equipment Corp. Hewlett Packard UNISYS
Sun Microsystem Solboume Compaq Dell Prime Data General Silicon Graphics MIPS
NCR AT&T Wang
NEC
Hitachi Commodore
V V V V T V V V V V V V V V V V V
Otros
sistemas de ventanas
OpenLoock
T T T
V V
V
V
Introducción al Sistema X Window
Historia y objetivos
Tanto los usuarios finales como los especialistas en computadoras encontraban dificil trabajar con los
primeros sistemas, Durante años multitud de empresas y organizaciones de investigación han aplicado los
desarrollos tecnológicos con el propósito de hacer las computadoras más fáciles de usar. Muchas de las utilidades y técnicas de las modernas computadoras se basan en trabajos anteriores a los años ochenta. Entre los ejemplos clave se incluyen la programación orientada a objetos, el Apple Macintosh, y las interfases gráficas de usuario con el ratón. Veamos a continuación los componentes básicos de los GUIs y después los compararemos con las implementaciones actuales de los sistemas X Window. Las interfases gráficas de usuario deberían proporcionar las siguientes posibilidades:
Uso extensivo de elementos de control visual estándares, como los iconos (icons) y las barras de desplazamiento (scroll bars). Los iconos son representaciones gráficas de objetos, por ejemplo un cubo de basura puede significar borrado de un archivo, Las barras de desplazamiento permiten al usuario desplazar los datos que aparecen en una ventana.
Manipulación directa de los elementos que hay en la pantalla. Por ejemplo, presionar un botón del ratón para modificar el margen de un documento hasta obtener el ancho deseado, en lugar de introducir un valor previamente calculado.
Consistencia a través de aplicaciones y plataformas. Los usuarios aprenden una sola vez la forma de
imprimir. Cuando conocen cómo imprimir un documento, va saben como imprimir otros,
independientemente de la aplicación y de la computadora utilizada.
Aplicaciones múltiples simultáneas. Por ejemplo, un usuario puede editar un documento y al mismo tiempo volver a calcular una hoja de cálculo. Conforme la computadora recalcarla la hoja de cálculo, la versión actualizada aparece automáticamente en el documento.
Con un sistema atractivo y fácil de usar. Un usuario contento es más productivo. Idealmente los usuarios deberían poder personalizar su GUI para adaptarla mejor a su trabajo, en lugar de tener que acomodarse a la forma de hacer las cosas de la interfaz gráfica de usuario (GUI).
Implementaciones
Ninguna de las interfases gráficas de usuario existentes actualmente cumplen todos los objetivos
indicados anteriormente. Sin embargo varios de los GUls más usuales cumplen muchas de ellas.
Macintosh Finder
Introducción al Sistema X Window
Microsoft Windows
Microsoft Windows o MS-Windows, se ha convertido en el estándar GUI de los sistemas compatibles IBM. Habiendo aparecido el mes de noviembre de 1985, las ventas de este producto se dispararon con la versión 3.0 lanzada en mayo de 1990. Cientos de las populares aplicaciones DOS se ejecutan actualmente sobre este entorno. La configuración recomendada para trabajar en este entorno consiste en una
computadora con un microprocesador 486, O preferiblemente un 586 , con al menos 8 Mb de memoria
RAM
para los usuarios que ejecutan un solo programa a la vez, y de 16 Mb para multitarea, y un monitorgráfico SVGA. En la Figura 1-7 se muestra Microsoft Windows.
Figura 1-7. Típica interfaz gráfica de Microsoft Windows
OS12 Presentation Manager
En abril de 1987, IBM lanzó la serie de microcomputadoras PS/2, muchas de las cuales corren bajo el sistema operativo OS!2. Presentation Manager (PM) fue el GUI estándar de las primeras versiones del OS/2. Su apariencia es bastante similar a la del MS-Windows. La influencia futura de OS/2 y el PM no esta clara, debido en parte a las cambiantes relaciones entre I BM y Microsoft.
El sistema DESQview
Introducción al Sistema X Window
ventanas como multitarea, e incluso ejecuta MS-Windows. La anunciada versión DESQviewR promete
ejecutar sistemas X Window en compatibles IBM.
NeXTstep
La computadora NeXT diseñada por Steve Jobs, uno de los dos creadores del Apple, alardea de disponer de un sofisticado sistema de ventanas llamado NeXTstep. Este sistema contiene varias características interesantes, tales como visualización PostScript, una interfaz MIDI para la generación de música, y un inmenso disco óptico, valiosísimo para las aplicaciones multimedia. Todos los programas que se incluyen
en los siguientes capítulos, se probaron en una computadora NeXT basada en. el microprocesador 68040.
Analogías
y
diferencias
Los sistemas X Window y las interfases gráficas de usuario (GUls) para microcomputadoras, tienen el mismo objetivo básico: facilitar el uso de la computadora. Todos proporcionan elementos gráficos, por ejemplo iconos y barras de desplazamiento, para comunicarse con el usuario. Herramientas en propiedad como OSFMotif que modifican los sistemas X Window en GUls. De hecho, los widgets de OSFMotif se
han diseñado para parecerse a MS-Windows.
Existen importantes diferencias entre los sistemas X Window y las GUls basados en microcomputadoras. Los diseñadores de sistemas X Window que se limitan a utilizar las librerías Xlib y Xt Intrinsics pueden crear una interfaz con una apariencia propia, en lugar de trabajar con la idea que otra persona tiene de una
interfaz ideal. Los sistemas X Window normalmente funcionan sobre estaciones de trabajo para
Ingeniería y científicos, más potentes que las microcomputadoras de gama alta. Se pueden usar con
terminales X y computadoras de todos los tamaños, desde los compatibles AT a las supercomputadoras.
Introducción al Sistema X Window
Puntos clave
2
En qué consiste el sistema X Window
?
El “sistema X Window” (también llamado X Window y en otras ocasiones, aunque erróneamente X
Windows), se ha convertido en la herramienta software estándar utilizada para el desarrollo de interfases gráficas de usuario (GUIs) sobre estaciones de trabajo. Debido a la independencia de dispositivo, las interfases gráficas de usuario desarrolladas en una computadora, pueden ser ejecutadas sin problemas en otras distintas.
El sistema X Window
El sistema
x
Window se ha convertido en un sistema de ventanas estándar independiente del hardware ydel sistema operativo. Se trata de una utilidad desarrollada para sistemas gráficos de alta resolución tanto en color como en monocromo.
Hardware
Los sistemas X Window se pueden ejecutar en gran variedad de dispositivos hardware. La unidad de salida es una pantalla gráfica, con una resolución VGA como mínimo. Los dispositivos de entrada comúnmente utilizados son el teclado y el ratón. La gran mayoría de los fabricantes de estaciones de trabajo soportan los sistemas X Window. Una alternativa que se está popularizando cada vez más son los terminales X, un terminal gráfico sin disco que ejecuta un Único programa, el servidor X Window. También hay disponibles sistemas X Window en las microcomputadoras de gama alta. El Open Desktop de Santa Cruz Operation System se ha convertido en el estándar para las microcomputadoras con sistema operativo UNIX. Este paquete proporciona todas las características de X Window.
Arquitectura Cliente/Servidor
El núcleo de la filosofía X Window es la arquitectura cliente/servidor. Esta arquitectura es el modelo del sistema X Window mediante el cual los clientes, o programas de aplicación, se comunican con los servidores, o unidades de visualización a través de la red.
A diferencia de los programas gráficos tradicionales, los clientes X Window no se comunican
directamente con el usuario. El cliente recibe la entrada del usuario, normalmente la pulsación de una tecla o la presión sobre el ratón mediante el servidor, la otra mitad de la arquitectura clientekervidor. El cliente ejecuta las órdenes X Window que necesita el servidor para dibujar gráficos. Varios clientes pueden estar conectados a un Único servidor.
Introducción al Sistema X Window
Conexiones
Una parte esencial de los sistemas X Window es el enlace fisico entre el cliente (programa de aplicación)
y el servidor (monitor). Los protocolos de red describen el formato y orden de los datos, y los bytes de
control que componen un mensaje enviado desde un punto a otro de la red. Los programadores X Window no necesitan conocer el protocolo de red que se está usando. Los tres protocolos de
comunicación de datos más comunes son: TCPAP, DECNet y STREAMS.
Soflware
Para enviar de forma correcta datos e información de control desde el cliente al servidor y viceversa se necesitan programas especiales. La comunicación clientehervidor en un sistema X Window se realiza a
través del protocolo de red, denominado protocolo X. Los expertos en programación X Window deben
conocer tres productos interrelacionados: Xlib, Xt Intrinsics y la herramienta en propiedad que hayan elegido. De la misma importancia es saber cuando utilizarlos.
Xlib es una biblioteca de unas 300 funciones escritas en lenguaje C usadas para generar el código que cumple el protocolo X, el cual impone un complejo conjunto de requisitos. Xlib reduce en gran medida la dificultad de la programación X.
Xt Intrinsics es una utilidad que proporciona X Window que permite construir bloques, como por ejemplo menús, barras de desplazamiento y cuadros de dialogo, ayudando a conseguir interfases de aplicación más consistentes.
De otro lado las herramientas en propiedad generadas por terceras partes proporcionan sus propias extensiones a las utilidades X incluyendo normalmente sus propios gestores de ventanas. La herramienta
más usada es OSF/”otif, de la Open Software Foundation (OSF), un consorcio creado en 1988 por los
grandes fabricantes de hardware, entre ellos IBM. DEC y Hewlett Packard.
El mayor competidor de OSFMotif es la interfaz gráfica de usuario Open Look, distribuida por AT&T y Sun Microsystems.
Interfases grápcas de usuario
Las interfases gráficas de usuario proporcionan una alternativa gráfica fácil de usar frente a las molestas interfases de texto que hacían dificil el uso de los primeros sistemas con computadoras. Una interfaz gráfica de usuario debería proporcionar las siguientes posibilidades:
0 Uso extensivo de elementos de control visual estándar, como por ejemplo iconos y barras de
desplazamiento.
o Manipulación directa de los elementos que están en la pantalla.
0 Consistencia a través de aplicaciones y plataformas.
0 Aplicaciones múltiples simultáneas.
Introducción al Sistema X Window
El programa “Hola Mundo ”
Capítulo 2
El
programa
YHola Mundo”
Tradicionalmente, el primer programa que se estudia cuando se aprende el lenguaje C, se llama “Hola Mundo” (“Hello World”). Este sencillo programa llama a una función C que imprime la cadena de caracteres “Hola. Mundo” en la salida estándar de la computadora (un terminal, a menos que se especifique otro destino).
main0
{
I printf(“\n Hola Mundo”);
En este capítulo se presenta un programa similar, escrito para sistemas X Window. Al principio parece algo complicado para ser un programa de iniciación, pero esto es inevitable, ya que X Window tiene mucho que hacer. El programador de X Window debe especificar detalladamente muchos pasos que los
programadores de lenguaje C o de cualquier otro lenguaje de alto nivel darían por dados. El resultado es
un programa claramente diferente, que no necesita ser modificado cada vez que cambie la computadora. Puede que ahora no lo comprenda todo. No se preocupe, ya que en los próximos capítulos veremos todos los puntos importantes en detalle. Puede escribir el programa, y a continuación compilarlo y enlazarlo mediante un archivo make (makefile) como el que se encuentra al final de este capítulo. Una vez que haya conseguido que se ejecute el programa pruebe a hacer modificaciones simples, y vera como van encajando las piezas.
Funciones X Window
En el programa “Hola Mando” que viene al final de este capítulo se incluyen las funciones X Window que son necesarias como mínimo para generar una salida a través de la pantalla. Por supuesto, los programas
realmente útiles serán mucho más complicados. Este programa contiene únicamente funciones Xlib, y no
hace referencia ni a Xt Intrinsics, ni a ninguna herramienta como OSF/Motif. El programa “Hola
Mundo” realiza las siguientes operaciones (algunas de ellas necesitan más de una línea de código):
0 Establece una conexión con la estación de trabajo. Con este paso se establece un enlace entre el
programa de aplicación (cliente) y la unidad de visualización (servidor).
o Crea una ventana en la pantalla. La función XCreateSimpleWindow utiliza nueve parámetros para
indicarle a X Window cómo y dónde debe colocar la ventana. Esta función genera un identificador de ventana único que el usuario debe grabar por si se hacen más adelante referencias a é1 dentro del programa.
0 Notifica a las otras aplicaciones de la estación de trabajo la creación de la nueva ventana. Recuerde
El programa “Hola Mundo”
Crea un contexto gráfico (graphics context) para la ventana. Un contexto gráfico es una estructura que contiene información acerca de los colores, los tipos de letra y anchura de las líneas.
Selecciona el tipo de suceso de entrada a procesar. Un suceso (event) es una estructura que envía el servidor y que describe un hecho que acaba de ocurrir, debiendo la aplicación seleccionar si
procesarlo o no. Los sucesos son un concepto hdamental en sistemas X Window.
Visualiza la ventana. Visualizar la ventana (mapping a window) significa hacer visible la ventana en la pantalla. Esta actividad está separada y se realiza a continuación de la creación de la ventana.
Ejecuta el bucle principal. El núcleo de un programa X Window es un bucle que lee y procesa sucesos, generando salidas cuando se requiere. Esta parte del programa realiza el verdadero trabajo de la aplicación. Los programas X Window deben estar preparados para procesar cualquier suceso
(cuyo tipo haya sido previamente seleccionado) procedente de cualquier cliente en cualquier
momento. No se extrañe de que los programas X Window sean complicados.
Finaliza el programa. En este punto, el programa deja de ejecutarse y devuelve los recursos al sistema.
Examen del programa “Hola Mundo
”En esta sección describimos una versión lo más simple posible del programa “Hola Mundo” escrita con funciones Xlib. Para hacerlo más legible las llamadas a las funciones Xlib se escriben en negrita. Al final del capítulo se muestra el listado completo del programa.
Inclusión de los archivos de cabecera
En la programación en lenguaje C se utiliza la directiva #include para acceder a un conjunto de declaraciones y constantes predefinidas situadas en unos archivos llamados cabeceras (headers). El preprocesador une la cabecera (#include) al código del programa fuente. X Window usa sus propios archivos de cabecera, como los que se muestran a continuación:
#include <XllIXlib.h> #include <Xll/xutil.h>
Declaraciones
Con el lenguaje de programación C se utiliza la directiva #define para asociar un nombre significativo y definido por el programador a una construcción del lenguaje C. Esta directiva genera programas más fáciles de comprender. En el siguiente ejemplo definimos el valor 1 como TRUE (VERDADERO) y el valor O como FALSE (FALSO).
#define TRUE 1 #define FALSE O
El programa “Hola Mundo”
char hellow[] = “Hola-mundo”; char theiconname[] = “Helloi”; char thewindowname[] = “hola”;
El lenguaje de programación C requiere una h i c a función main que indique cuál es la primera función ejecutable del programa El parámetro argc señala al número de argumentos de la línea de ordenes. El parámetro argv se corresponde con un puntero a una lista de cadenas de caracteres que contiene los argumentos de la línea de órdenes.
main (argc, argv) int argc; char *argv[J;
{
Las instrucciones siguientes son propias de los programas X Window.. Declaran el monitor a abrir y la ventana que aparece en él. El identificador *thedisplay es un puntero a una estructura de datos que gestiona la conexión con la estación de trabajo. El elemento thewindow identifica el recurso ventana, y el elemento thegc identifica el contexto gráfico. Las estructuras de datos asociadas con thewindow y thegc deben ser accesibles durante toda la aplicación. El elemento theevent se corresponde con una compleja estructura de datos que contiene información asociada con cada uno de los sucesos de entrada de datos detectado por el servidor. El elemento thekey identifica la tecla pulsada cuando ocurre un suceso asociado al teclado. El elemento thehint se corresponde con la estructura de datos mediante la que el programa informa a las demás aplicaciones acerca de esta ventana.
Display “thedisplay; Window thewindow;
GC thegc;
XEvent theevent; KeySym thekey; XSizeHints thehint;
Con las instrucciones siguientes se declaran las variables C usadas en la implementación X Window:
int thescreen;
unsigned long theforeground, thebackground; char thebuffer[S];
int keycount; int finished;
Establecimiento de la conexión
La primera función Xlib que aparece con cualquier programa es
thedisplay = XOpenDisplay(“ “);
El programa “Hola Mundo ”
Creación de una ventana
La línea
thescreen = DefaultScreen(thedisp1ay);
identifica la pantalla por omisión de la unidad de visualización. X Window puede usarse con unidades de visualización que consten de varias pantallas físicas. Por ejemplo, una pantalla color y otra monocromática.
thebackground = Whitepixel (thedisplay, thescreen); theforeground = BlackPixel (thedisplay, thescreen);
Este par de macros C identifica los valores de los puntos (pixels) asociados con el color del fondo y del primer plano (background and foreground) de la pantalla. El fondo no tiene porque ser blanco, y el primer plano no tiene porque ser negro. La estructura de datos a la que apunta thedisplay incluye estos valores de los puntos (pixels). Si cambiamos el monitor de la estación de trabajo el programa toma en cuenta automáticamente los nuevos valores para los puntos, manteniendo la compatibilidad.
Los campos de la estructura de datos de la variable thehint (que es del tipo XSizeHints) contienen los valores que describen la ventana al gestor de ventanas, como sigue:
thehint.x = 100; thehint.y = 150; thehint.width = 275; thehint.height = 120;
thehint.flags = PPosition
I
PSize;Los elementos thehintx y thehint.y muestran la posición de la esquina superior izquierda de la ventana: 100 puntos a la derecha (valor x) y 150 puntos hacia abajo (valor y), respecto de la esquina superior izquierda de la pantalla.
Como estos dos elementos están íntimamente relacionados, pueden colocarse en la misma línea de
programa. Los elementos thehintwidth y thehintheight indican la anchura y la altura de la ventana,
medida en puntos. El elemento thehint.Jags indica la posición y el tamaño preferidos para la ventana. Las
siguientes fimciones Xlib solicitan al servidor la creación de la ventana. thewindow = XCreateSimpleWindow (thedisplay,
DefaultRootWindow (thedisplay), thehint.x, thehint.y, thehint.width, thehintheigth, 7, theforeground, thebackground);
La fimción XCreateSimpleWindow devuelve el identificador de la ventana dada mediante la variable
thewindow. Esta fimción incluye nueve parámetros, que deben escribirse ordenados: el identificador de ventana, la ventana padre (en este caso, la ventana raíz, que ocupa la pantalla completa), la posición x e y de la ventana, la anchura y altura de la ventana, la anchura del borde en puntos, el color del borde o del primer plano, y el color dei fondo.
Nota. Todos los parámetros se han definido antes de llamar a la fimción.
Notificación a las demás aplicaciones
El programa “Hola Mundo”
XSetStandardProperties(thedisplay, thewindow, thewindowname, theiconname, None, argv ,argc,
&thehint);
permite a una aplicación informar al gestor de ventanas de sus preferencias (&thehint), incluyendo los argumentos de la línea de órdenes (urgc y urgv). La función hace referencia al nombre de la ventana previamente d e f ~ d o (thewindownume).
Creación de un contexto
gráico
La función Xlib
thegc = XCreateGC (thedisplay, thewindow, O, O);
crea un contexto gráfico con los valores por omisión.
Las dos funciones siguientes establecen los valores para el fondo y para el primer plano del contexto gráfico.
XSetBackground (thedisplay, thegc, thebackground); XSetForeground (thedisplay, thegc, theforeground);
Selección del tipo de suceso de entrada a procesar
Con la función Xlib
XSelectInput (thedisplay, thewindow, (keyPressMask
I
ExposureMask));se le pide al servidor que informe a la aplicación cuando se pulse una tecla mientras el cursor está en su ventana. La aplicación también realizará sucesos Expose (Exposición), que informan al cliente de que su ventana ha Sufi-ido un cambio. Por ejemplo, si la ventana A está oculta por la B, y desaparece la ventana
B, se produce un suceso Expose, de forma que la aplicación deberá volver a dibujar parcial o totalmente
la ventana A, como se explica detalladamente en el Capítulo 4, “Ventanas y técnicas de trabajo con ventanas”.
Visualización de ventanas
La función Xlib
XMapRaised (thedispLay, thewindow);
visualiza la ventana en la pantalla, encima de todas las ventanas existentes. Esta función envía un suceso Expose al programa para que redibuje la ventana cada vez que deja de estar cubierta. Por ejemplo, cuando desplazamos una ventana que la tapaba. Para aceptar tales sucesos Expose se incluye la función
XSelectInput.
Ejecución del bucle principal
A la variable 1ÓgicaJinished (final) se le da inicialmente el valor FALSE (FALSO) de forma que el bucle
El programa “Hola Mundo”
procesamiento del programa. Solicita un suceso, visualiza la cadena “hola-mundo” en la ventana, y acepta una entrada desde el teclado si el ratón está en el área de la ventana o si se presiona el botón izquierdo del ratón. El programa termina si el usuario pulsa la tecla “q”. Inicialmente se le asigna a la variable finished. FALSE, con la siguiente línea se hace que el bucle se repita mientrasfinished sea igual a FALSE. El bucle al menos se ejecuta una vez.
finished = FALSE;
while (finished = FALSE) {
La función XNextEvent espera hasta que el servidor detecte un suceso de un tipo ya seleccionado con la
función XSelectlnput.
Nota. Esta y las líneas que vienen a continuación se encuentran indentadas, indicando de esta forma su inclusión en la sentencia while.
XNextEvent (thedisplay, &theevent);
La sentencia switch dirige los sucesos seleccionados a la sección apropiada del programa.
switch (theeventtype) (
Procesamiento de los sucesos Expose
El código que existe entre las líneas case Expose y break se ejecuta solamente cuando se producen
sucesos Expose. Los demás sucesos son procesados por las siguientes instrucciones case. Un valor cero en
la variable theevent.xexpose.count se da en dos casos: o se produce un ímico suceso Expose, o se produjo el último de una serie de sucesos Expose asociados. El programa “Hola Mundo” ignora todos los sucesos Expose anteriores al último suceso de un grupo dado.
La función XDrawlmageString incluye siete parámetros. El programador debe especificar
ordenadamente: la pantalla, la ventana, el contexto gráfico, el desplazamiento horizontal y vertical (medidos en puntos) del primer carácter del texto, el identificador de la cadena de caracteres a dibujar, y la longitud de esta cadena de caracteres. Cada vez que se produce un suceso Expose se vuelve a dibujar esta cadena.
case Expose:
if (theevent.xexpose.count == O )
XDrawImageString (theevent.xexpose.display,
theevent, xexpose.window, thegc,
205,65, hellow, strlen(hel1ow);
Procesamiento de cambios en la configuración del
teclado
Aunque no se han seleccionado explícitamente sucesos relacionados con la configuración del teclado, este
El programa “Hola Mundo”
case MappingNotify; break;
XRefreshKeyboardMappin(&theeveut);
Procesamiento de las entradas de teclado
El código que a continuación se muestra, se ejecuta cuando los usuarios pulsan cualquier tecla. La función XLookupString obtiene de las teclas pulsadas una cadena de caracteres y calcula su longitud, que frecuentemente, aunque no siempre, es l. Si el primer carácter de la cadena es una letra “q! minúscula, se le asigna a la VariableJinished el valor TRUE (VERDADERO), acabando así el bucle y el programa. Esto es lo que hace el siguiente programa.
case Keypress:
keycount = XLooknpString (&theevent, thebuffer, 8, &thekey, O); if ((keycount = 1) && (thebuffer[O] = ’9‘))
finished = TRUE; break;
Terminación del programa
Las dos llaves de cierre
(1)
del segmento de código que se muestra a continuación se corresponden con las dos llaves de apertura que aparecen anteriormente en el programa. Observemos el uso de comentarios encerrados entre los símbolos f* y *f. Es conveniente escribir comentarios en los programas sobretodo cuando se programa con X Window.} /* switch (theeventkype) */ } I* while (finished = FALSE) */
Las tres funciones siguientes eliminan el área de contexto gráfico y la ventana, cancelan la conexión entre el servidor y el cliente, y por último detienen el programa.
XFreeGC (thedisplay, thegc);
XDestroyWindow (thedisplay, thewindow); XCloseDisplay (thedisplay);
} I* main *I
Al final del capítulo se ofrece el programa “Hola Mundo” completo.
Modificaciones posibles
Aunque parezca largo, este programa es tan sólo el comienzo de la programación X Window. Ahora que
conocemos lo que contiene el programa, vamos a considerar algunos de los elementos que faltan. Para