u niversidad autónoma metropolitana

53
# U niversidad Autónoma Metropolitana Unidad: 'División: /Carrera : Materia: YTít u I o : ""Fecha: 4lumno: iztapaiapa Ciencias Básicas e Ingeniería Licenciatura en Compu taci ó n Proyecto de Investigación I I Ambiente Gráfico para Programación Marzo de 1998 Lázaro Islas Saavedra Matrícula: 84331 704 Asesor: ing. Jorge Lozano Moreno

Upload: others

Post on 14-Jul-2022

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: U niversidad Autónoma Metropolitana

#

U niversidad Autónoma Metropolitana

Unidad:

'División:

/Carrera :

Materia:

YTít u I o :

""Fecha:

4lumno:

iztapaiapa

Ciencias Básicas e Ingeniería

Lice n ci at u ra en Com pu taci ó n

Proyecto de Investigación I I

Ambiente Gráfico para Programación

Marzo de 1998

Lázaro Islas Saavedra

Matrícula: 84331 704

Asesor: ing. Jorge Lozano Moreno

Page 2: U niversidad Autónoma Metropolitana

Turbo Power SofhaPe.

UNIVERSIDAD AUTONOMA METROPOLITANA

Casa abierta al tiempo

LICENCIATURA EN COMPUTACION

Page 3: U niversidad Autónoma Metropolitana

M A N U A L T É C N I C C O

Elaborado p o r :

Ale jandro Garcia Teroba.

Lazaro I s l a s Saavedra.

Agosto de 1991.

Page 4: U niversidad Autónoma Metropolitana

m u d Técnico Indico

INDICE

Introducción. -

Prologo.

Datos generales de la unidad gráfica

¿Que es UniGraf?

Gr ConIODrv

Windows

Menus

Editor

Requerimientos

Objetivos del proyecto

4

5

5

6

6

7

7

8

9

Metodología seguida (Diseño)

Turbo Profesinal

Diseño de la interfaz gráfica

Implementación de las rutinas

10

12

16

2

Page 5: U niversidad Autónoma Metropolitana

nanual Técnico Indi ce

Código fuente de las rutinas. 17

Conclusiones y análisis de resultados. 1 8

Bibliografía.

3

Page 6: U niversidad Autónoma Metropolitana

h n u a l Técnico introducci6n

CAPITULO 1 INTRODUCCION

PROLOO0 . Las gráficas por computadora es uno de los campos más

interesantes y que crece más rápidamente dentro de la computación.

Algunos de los sistemas de computación más complejos que se usan

hoy en día están diseñados para la generación de decplieges

gráf icos .

El uso de figuras es un medio eficaz de comunicación, y la

capacidad de interactuar en forma gráfica con una computadora, es

una de las alternativas más apreciadas por aquellos que manejan

estas herramientas. Las opciones de entrada a muchos programas de

computadora se diseñan como un conjunto de fconos, símbolos

gráficos que se parecen a la opción de procesamiento que deben

representar. Los usuarios seleccionan opciones de procesamiento

señalando el icono adecuado. La ventaja de estos sistemas, es

que l o s iconos pueden ocupar menos espacio en la pantalla que

la descripción textual correspondiente de las funciones y puede

entenderse más rápidamente si estos estan bien diseñados.

Page 7: U niversidad Autónoma Metropolitana

Wanual Técnico

1 . 1 DATOS GENERALES D E LA UNIDAD GRÁFICA.

Una interfaz gráfica para el desarrollo de sistemas, es un

conjunto de utilerias que nos ayudarán a producir procesos con

capacidades gráficas de manera fácil y rápida, ademas de optimizar

el uso los recursos de entrada y salida de datos de la computadora

como son: Teclado, ratón, pantalla e impresora.

¿QUE ES UNIGRAF 1 . 0 3

UniGraf es un conjunto de rutinas basadas en GRAPHICS, que es

el conjunto de primitivas gráficas utilizadas en los compiladores

de TURBO C y TURBO PASCAL. Estas a su vez son rutinas estandares

del conjunto GKS (Graphics Kernel System), que es el estandar

aceptado por la IS0 (International Standards Organization) y por

la ANSI (American National Standards Institute) como el conjunto

de primitivas gráficas.

La herramienta desarrollada, fue inicialmente diseñada para

ser utilizada como funciones de librería en el código fuente de

los sistemas. Éstos deberán ser codificados en el lenguaje C o

Pascal. Para hacer uso de la unidad gráfica, s e recomienda el

uso de los compiladores T u r b o C 2.0 o posterior o Turbo Pascal 5 . 0

ya que las rutinas se implementaxon basandose en estos compila-

dores.

5

Page 8: U niversidad Autónoma Metropolitana

Introducción

UniGraf se divide en cuatro módulos, clasificados deacuerdo

a las tareas que realizan cada uno de ellos. Éstos módulos

son: GrConIODrv, Windows, Menus, Editor.

GrConIODrv. Este módulo es una extencion de las librerías

conio y s tdio de C y es necesaria para el uso de la unidad. E s

aquí donde se verifica el equipo existente y se adaptan las

librerías para su portabilidad entre diferentes equipos. En este

módulo se incluyen las rutinas para el manejo de: teclado, ratón,

pantalla e impresora.

Windows. Este módulo contiene un conjunto de rutinas que le

permiten al usuario un manejo más amigable de la presentación

en pantalla, ya que se pueden hacer desplegados en una sección

de la pantalla conservando la información que se encontraba

anteriormente y recuperar dicha información posteriormente. Esto

permite que se puedan manejar más datos de los que pueden

presentar en una sola pantalla. Lo anterior se logra mediante el

uso de un TDA (Tipo de datos abstractos) al que hemos llamado

Ventana (Window). El uso de ventanas simula la sobreposición de

los datos a la pantalla actual (Apertura de la ventana) y el

retiro de estos lo cual regresa la pantalla a su forma original

(Cierre de la ventana).

6

Page 9: U niversidad Autónoma Metropolitana

introduccibn

Menfie. En este módulo se incluyen rutinas que facilitan la

construcción de menús interactivos, esto es, que mediante el uso

de pocas lineas de código, se puede hacer que el sistema desarro-

llado cuente con una forma de tomar de decisiones controlada

por el usuario final, ésta se basa en la introducción de la

opción por medio del manejo del ratón o las teclas de cursor.

Dentro de la opción podrán relizarse una o más instrucciones.

Editor. En éste módulo se incluyen rutinas para el manejo

del desplegado y captura del texto del sistema a desarrollar.

El módulo permite la manipulacion de los atributos del texto

como son: Color, Tamaño, Estilo o Tipo de datos. La entrada de

datos se puede hacer mediente el teclado o el raton, así mismo

la salida podra ser a la pantalla o la impresora.

7

Page 10: U niversidad Autónoma Metropolitana

Manual Técnico rnrroducci 6x1

REQWXIMIENTOS . UniGrad, ha sido construida con la finalidad de que funcione

con cualquier tipo de computadora compatible con IBM. La

principal preocupaci6n que se tuvo en su diseño, fue hacer una

herramienta de desarrollo autoconfigurable a tiempo de ejecución,

lo anterior significa que un sistema desarrollado con cierto

equipo de hardware deber6 funcionar correctamente cuando este

migre a un equipo diferente. Sin embargo se deben tener algunas

consideraciones para lograr un mejor rendimiento de los sistemas

desarrollados, entre lo que se recomienda el parametrizar las

coordenadas, los colores y los estilos utilizados.

Aun cuando UniGraf sea una herramienta autoconfigurable,

existe un mínimo equipo requerido para su correcto funciona-

miento, el cual se cita a continuacion:

- Un computador compatible con IBM PC/XT/AT o PS/2

- Una targeta gráfica CGA/EGA/VGA o Hercules

- Disco duro.

- Cornpilador C o Pascal.

- 640kb de memoria como mínimo.

El quip0 que se recomienda para obtener mejores resultados,

es un sistema de computacion AT con memoria extendida, disco

duro de rápido acceso y targeta de video de a l t a resolucion

entre las que se recomienda una SuperVGA, IBM8514, o Hercules

en color.

Page 11: U niversidad Autónoma Metropolitana

m u d Técnico

OBJETIVOS DE LA UNIDAD GRÁFICA.

Como ya se ha explicado con anterioridad, la unidad gráfica

tiene como objetivos principales, proveer al programador de una

herramienta para el desarollo de sistemas con capacidades

gráficas, ésta debera ser fácil de usar ademas de optimizar el

uso de los recursos del sistema.

Uno de los objetivos más importantes del proyecto, fue

crear un conjunto de rutinas independientes del hardware, que

se autoconfiguraran al tiempo de ejecución de manera transpa-

rente al programador sin que por ello se pierdiera la sencillez

de programaci6n o el alcance y efectividad de la unidad.

Cabe mencionar que siempre se tuvo en mente el tratar de

proporcionar un abmiente agradable como resultado del uso de

las rutinas de la unidad, Para lo cual se diseñaron las

presentaciones tomando el mayor cuidado posible, haciendo

siempre consultas a diferentes personas a las cuales les estoy

agradecido por su valiosa participacion.

9

Page 12: U niversidad Autónoma Metropolitana

uanusl TBcniM Diseño.

CAPITULO 2 METODOLOGIA DE IMPLEMENTACION. -

Existen muchos factores que se incluyen en el diseño de una

interfaz del usuario. Ademas de las operaciones especificas que

se pondrán a disposición del usuario, debemos considerar cómo se

organizarán los menús, cómo responderá la unidad a la entrada

de datos y a los errores generados, cómo se organizará el des-

pliegue de salida, y como se documentará y explicará el uso de

la unidad.

Para simplificar el trabajo a relizar, se tomará como base

una herramienta ya existente, que ofrece todas las posibilidades

citadas anteriormente con la desventaja de que estas han sido

implementadas en modo texto, esto es que solo se cuenta con

desplieges de caracteres gráfico pre-establesidos. Debe conside-

se el echo de que el tomar como base un paquete ya existente, no

minimísa el trabajo ya que solo se tomará la estructura de este,

correspondiendole a los desarrolladores, el analizar, depurar,

diseñar e implemetar todas aquellas funciones y procedimientos

que se incluyan.

TURBO PROFETIONAL.

Turbo Profetional es un conjunto de rutinas que se usan como

librerías, para el manejo de los recursos del sistema. Esta

implementado para ser usado en unión a las rutinas del compilador

TURBO PASCAL 4.0 o posterior, se divide en cinco módulos, los

cuales se describen a continuación.

10

Page 13: U niversidad Autónoma Metropolitana

nanuai Tbcnico Diseño.

TPCRT. Es un conjunto de rutinas que substituyen a la unidad

CRT de Turbo Pascal, en esta se hace el manejo de los recursos

del sistema entre los que se encuentran: El video, teclado, ratón

memoria, disco duro, etc.

TPSCREEN. Proporciona el uso de la memoria normal como una

extención de la pantalla, lo que nos proporciona un manejo

bastante amplio de este recurso.

TPWINDOWS. Permite el uso del TDA Ventana el cual fue des-

crito en la introducción de este manual.

TPMENTJ. Este módulo provee un conjunto de utilerias para la

construcci6n de menus interactivos al estilo LOTUS o BORLAND.

TPEDIT. Es un conjunto de rutinas que nos permiten la mani-

pulación de datos cómo son: La entrada de datos desde el teclado,

la entrada de datos residentes en la pantalla, la salida de

datos a la pantalla, etc.

Cuando se eligio a Turbo Profetional cómo base del proyecto

se penso en aumentar los alcances de la unidad, para lo cual se

hizo un minucioso análisis de este para con ello incluir lo

mejor de este en nuestra unidad. De los resultados obtenidos,

s e llego al siguiente esquema de lo que debería ser UniGraf 1 . 0

11

Page 14: U niversidad Autónoma Metropolitana

Diseña.

DISEÑO DE LA INTERFAZ GRÁFICA.

Modelo del usuario.- El modelo del usuario, ofrece la defini- ción de los conceptos impicados en la unidad gráfica. Este modelo

ayuda al usuario a entender la forma en la que opera el paquete

en terminos de aplicaciones. Explica al usuario que tipos de

objetos pueden desplegarse y como pueden manipularse.

Dentro del modelo del usuario de la unidad gráfica contamos

con diferentes objetos manipulables que fuerón diseñados tomando

en cuenta los paquetes existente en el mercado, los objetos se

muestran a continuación:

Page 15: U niversidad Autónoma Metropolitana

nanual TOcnico Diseño.

Este es un ejemplo del tipo de ventana que

se puede desplegar con la unidad gráfica, los

atributos que pueden se modificados son:

- Tipo de marco (con marco o sin marco) - Tamaño del marco (0-10)

- Tipo de relleno del marco. - Tipo de relleno del interior. - Color del marco.

- Color del interior.

13

Page 16: U niversidad Autónoma Metropolitana

-nus1 Técnico Dise f io .

Arriba se muestra un menú típico que se

que se puede construir con la unidad gráfica.

Esta es uno de l o s objetos mas versatiles de

la unidad ya que se adapta a las necesidades

de programador, los parametros que son modi-

f icables son:

- Número de opciones.

- Dependencias por opcion.

- Procesamiento parametrizado de funciones.

- Tamaño de la ventana de selección.

- Tipo de relleno de la ventana.

- Color de la ventana.

- Color del texto de opcion valida. - Color del texto de opcion invalida.

- Color de los botones de seleccion.

- Color de barra de seleccion.

Page 17: U niversidad Autónoma Metropolitana

Diseño.

Una de las ventajas más grandes de un

ambiente gráfico es el uso de iconos, ya se

explico con anterioridad que un icono es una

descripción gráfica de un proceso o procesos

el usuario se posiciona en el icono adecuado

para seleccionar la tarea a realizar.

La inidad gráfica cuenta con una

colección de iconos precontruidos accesibles

al programador como los objetos anteriores,

estos pueden ser parametrizados para su uso,

los iconos que se incluyen son los siguientes.

Page 18: U niversidad Autónoma Metropolitana

Manual Técnico Disetío.

Lenguaje de comandos. - La operaciones. que el usuario

tiene a su disposición, se definen en el lenguaje de comandos,

éste espesifica las funciones de manipulación de los objetos

y las operaciones de archivo. Las funciones comunes de

manipulación de objetos, son aquellas que sirven para reoxdenax

y transformar los objetos de una esena. Las operaciones de

archivo pueden ofrecer la creación, cambio de nombre y copiado

de segmentos gráficos. Sobre este lenguaje de comandos se hablará

más extensamente en el manual de usuarios, por ahora sólo

mencionaremos que este se diseño tratando de acercarse mas al

lenguaje común de programaci6n, en este caso el lenguaje C,

cabe mencionar que son accesibles las primitivas GKS que ofrece

el propio compilador de TURBO C.

Una consideración importante en el diseño de una interfaz es

la forma en el que el sistema responderá (dará retroalimentación)

a la entrada del usuario. La retroalimentación, ayuda al usuario

al operar el sistema reconociendo la recepción del comando

enviandole diversos mensajes y señalándole cuándo cuando se han

recibido las selecciones o entrada de datos. Algh tipo de

retroalimentación es parte integral de la estructura del lenguaje

de comandos, en tanto que se ofrecen otras formas de retroalimen-

tación para ayudar a un usuario a entender la operación del

sistema. La unidad gráfica fue diseñada tomando encuenta lo

anterior, en ella se asume una constante comunicación entre el

usuario y el sistema a base de distintos tipos de respuesta,

cómo puede ser la simulación de presionar un botón o el efecto

de cerrar una ventana.

16

Page 19: U niversidad Autónoma Metropolitana

wanual TOcnico códigos fuentes.

CAPITULO 3 CODIGOS FUENTE .DE LAS RUTINAS.

I 17

Page 20: U niversidad Autónoma Metropolitana

Manual técnico

/*

DEMOSTRACION (FRAME c)

UNIVERSIDAD AUTONOMA METROPOLITANA.

Códigos fuentes

PROGRAMA DE DWSTRACION DEL LA UNIDAD ORAFICA QW COMO PROYECTO DE INVESTIGACION I1 PRESENTAN

Los ALUMNOS:

ALEJANDRO GRACIA TEROBA. LAZAR0 ISLAS SAAVEDRA.

ASESOR INTERNO:

M.C. JORGE LOZANO MORENO.

#i nc I ude "g rw i nd ow s. s rc"

struct WindVars Ventl, Vent2, Vent3, Vent4;

chax *BUFFMUSIC;

FILE *fopen(), *filemusic;

int GraphDriver;

Screen *ventanal, *ventana2, *ventana3, *ventana4, *respaldol, *respaldo2, *respaldo3, *respaldo4;

1

Page 21: U niversidad Autónoma Metropolitana

Manual técnico

,

DEMOSTmCION (FRAME. C )

C6digos fuentes

void inicio (void)

/* Función de inicialización de variables para la demostración */ {

int x=35, y=185,i, yi, yf; yi = getmaxy 0 - 25; yf = yi + 17; y = yi + 5 ; setbkcolor (O) ; cleardevice 0 ; if (GraphDriver == 1 I I GraphDriver == 2 I I GraphDriver == 7)

I setcolor (1) ; ClearRec (O, O, getmaxx ( 1 , getmaxy ( 1 , 1 , 1,29 , O, O, O) ; rectangle (3,3, getmaxx ( ) - 3, getmaxy 0 - 3) ; rectangle (6,6, getmaxx ( ) - 6, getmaxy ( ) - 6 ) ; setf illMode (29 , O) ; f loodf ill (20 , 20, O) ;

3 else

i setcolor (CYAN) ; ClearRec (O,O,getmaxx~),getmaxy~),GRIS~BRILLANTE,GRIS~BRIL~E,

rectangle (3,3, getmaxx (1 - 3 , getmaxy ( 1 - 3) ; rectangle (6,6 , getmaxx ( 1 -6 , getmaxy 0 -6) ; setfillMode (C PRIMER PLAN0,GRISBRILLANTE); f loodf ill (20 ,TO, CYAN); setcolor (BLANCO) ;

C PRIMER-PLANO, O, O, O) ;

3 i = O; framewindow (20,yi,lOO,yf,l,l,l,GRIS,O); x = 45; gpr in t f xy (x , y, NEGRO, GRIS, ''MENU" 1 ; framewindow (108 , yi ,188, yf, AZUL, 1 , 1, AZUL, O) ; x = 121; gpr intfxy (x, y , NEGRO, AZUL, "WINDOW" 1 ; framewindow (i97,yil276,yf,vERDE,1,l,~~E,O); x = 218; gprintfxy (x,y,NEGRO,VERDE, "TEXTS") ; framewindow (286,yi,366,yf,CYAN,l,l,CYAN,O); x = 299; gprintfxy (x,y,NEGRO,CYAN, "COLORS") ; framewindow (372,yi,452,yf,R0J0,1,1,R0J0,0); x = 390; gprintfxy (x,y,NEGRO,ROJO, "MVSIC") ; framewindow (460,yi,540,yf,MAGENA,lll,MAGE~A,O); x = 475; gpr in t f xy (x , y, NEGRO, MAGENTA, "IMAGE" ) ; framewindow (5!5O,yi,630,yf,MAGENTA,l,l,GRIS~BRILLANTE,O~ ; x = 575; gprintfxy (x,y,NEGRO,GRISBRILLE, "EXIT") ;

1

Y '

2

Page 22: U niversidad Autónoma Metropolitana

Manual técnico

DEMOSTRACION (FRAME. C)

Códigos fuentes

int error (void)

/* Función que regresa a l sistema operativo despues de un error */

res torecr tmode ( 1 ; textmode (3) ; printf (u\033 [2j") ; printf (ilFallo de memoria") ; exit (-1); return ( O ) ;

musica 0

/* Función que carga u11 archivo en lenguaje musical t i p o BASIC */ {

char c=32; int i=O ;

filemusic = fopen w william","^") ; BUFFMUSIC = (char * ) malloc (30); while (c ! = EOF && i < 30000) I fscanf (filemusic, "%c" , &c) ; BUFFMUSIC[i] = C; i++;

BUFFMUSIC[il = ' \ O ' ; if (c == EOF)

else

1

return ( O ) ;

return (1); I

function1 0

/* Función que emula l a apertura y cierre de las ventanas */ {

int c;

restorevideo (ventanal) ; getch 0 ; restorevideo (ventana2) ; getch 0 ; restorevideo (ventana31 ; getch 0 ; restorevideo (respaldo3) ; getch 0 ; restorevideo (respa ldo2) ; getch ( ) ; restorevideo (respaldol) ;

1

3

Page 23: U niversidad Autónoma Metropolitana

Manual técnico Códigos fuentes

DEMOSTRACION (FRAME. C )

int main 0

/* AUTOR: A l e j a n d r o Garcia Teioba Y L A Z ~ I O Islas Saavedra */ /* FECifA: 2O/Julio/1991 - 27/Julio/1991 */

I

int c,i,maxx, maxy; char buff tmp [611 , ch;

Initialize (1 ; inicio 0 ; maxx= getmaxx ( ) ; rnaxy= getrnaxy ( ) ; if (Mouse Installed 0 1

else

respaldo1 = backingvideo(50,20, (int) (3*maxx/4), (int) (2*maxy/3) 1 ; framewindow (50,20, (int) (3*maxx/4), (int) (2*maxy/3)

Ventl.frsize = 6; window (50+framesizehoriz(2) , 20+framesizevert(2),

450-framesizehoriz(2),176-f1amesizeve1t(2)); getch O ; for (i=48;i<15O;i++)

ventanal = backíngvideo (50,20, (int) (3*maxx/4), (int) (2*maxy/3) 1 ;

respaldo2 = backingvideo(400,50,5001100~; framewindow (400,50,500,100,GRIS,1,PORO~LIGERO,GRIS~BRILLANTE,O~;

window (4DO+f1arnesizehoriz (O) , 50+framesizevert (O), 500-framesizeho1iz(0),lOO-framesizevert(O));

gprintf-(NEGRO, CYAN, EL RATON HA SIDO INSTALADO ' I ) ;

gprintf (NEGRO,CYAN," El raton no ha sido instalado") ;

,ROJO,PORO - LIGERO,C-PRIMER-PLANO,AZUL,6);

gprintf (GRIS BRILLANTE, AZUL, "%c", i) ;

Vent2.frsize = O;

getch O ; ventana2 = backingvideo(400,50,5001100);

respaldo3 = backingvideo(80,15,280,85); framewindow

Vent2.frsize = 2; window (95, 27, 266,73); getch O ; for (i=48; i<150; i++)

for (iz48; i<i50; i++)

for (i=48;i<150; i++)

ventana3 = backingvideo(80,15,280,85);

framewindow

Vent2.frsize = 1; window (360+f1amesizeho1~z(l),lOO+f1amesizevert(l),

620-framesizeho1iz(l),l7O-framesizevezt(l)); getch 0 ;

( 8 0 , 1 5 , 2 8 0 , 8 5 , C Y A N , C P R I M E R P L A N O , C P R I M E R - PLANO,MAGENTA,Z);

gprintf (CYAN,MAGENTA, "%c", i) ;

gprintf (CYAN, MAGENTA, "%c", i) ;

gprintf (CYAN, MAGENTA, "%c" , i) ;

(360,95,620,170,GRIS,C - PRIMER - P L A N O , C _ P R I M E R _ P W O , A Z U L , 3 ) ;

4

Page 24: U niversidad Autónoma Metropolitana

Manual técnico

,,

DEMOSTRACION ( P u c)

inicio O ; while (1)

{ c=GetChar O ; if ( - Mouse - X > 100 && Mouse-X < 188)

if ( - Mouse-X > 550 &&Mouse-X < 630) switch (c) I

c = ' w ' ;

c = le';

case 'w': case ' W ' : function1 0 ; break; case 't': case 'TI : gprintf (NEGRO,BLANCO, I' f2 ' I ) ; break; case IC':

case IC' : gprintf (NEGRO,BLANCO, 'I f3 ' I ) ; break; case 'm': case 'MI:

fxCalibrateDelay 0 ; musica O ; c=O; i=O; ch; while (ch! =EOF)

I ch = 32; for (i=O;ch!=EOF&&ch!='\n';i++)

bufftmp[i] = ch = BUFFMUSIC [i+cl ; c=c+ i ; bufftmpli-11 = ' \ O ' ; fxPlay (bufftmp) ;

1 free (BUFFMUSIC) ; break;

case 'e': case 'E':

restor textmode (3) ; exit ( O ) ; break;

1 1

1

~r tmod o ;

Códigos fuentes

5

Page 25: U niversidad Autónoma Metropolitana

Manual técnico Cbdigos fuentes

GrConI0Drv.H

/* UNIVERSIDAD AUTONOMA METROPOLITANA.

ENCABEZADO DE DEFINICIONES Y CONSTANTES DE LA

QUE COMO PROYECTO DE INVESTIGACION I1 PRESENTAN LOS ALUMNOS:

UNIDAD GRAFICA PAiU LENGUWE C (GK9).

ALEJANDRO GRACIA TEROBA. LAZAR0 ISLAS SAAVEDRA.

ASESOR INTERNO:

M. C. JORGE LOZANO MORENO. * /

#ifndef -UAM-GRDEF- #define UAM-GRDEF- #include-<graphics.h> #include <stdio.h> #include <string.h> #include <dos.h> #include <mem.h> #include <math.h> #include <conio.h> #include <stdlib.h> #include <gxlib.h> #include <pcxlib.h> # include < f xl ib . h> #define TRUE 1 #define FALSE O

#define ON 1 #define OFF O

#define PI 3.14159

/ * Define some handy constants * / /* Define some handy constants * /

/* Define some handy constants * / / * Define some handy constants * /

/ * Define a value for PI

/+ COLOR89 NATUIULES DISPONIBLES +/

#define NEGRO O #define AZUL 1 #define VERDE 2 #define CYAN 3 #define ROJO 4 #define MAGENTA 5 #define CAFE 6 #define GRIS 8 #define GRIS BRILLANTE 7 #define AZUL-BRILLANTE 9 #define VERDE BRILLANTE 10 #define CYAN BRILLANTE 11 #define ROJO-BRILLANTE 12 #define MAGEmA BRILLANTE 13 #define AMARILLO 14 #define BLANCO 15

* /

1

Page 26: U niversidad Autónoma Metropolitana

Manual técnico Códigos fuentes

GrCon1ODrv.H

/* TRAZADOS DISPONiBLXS PIUU EL RELLENO */ #define C FONDO O #define CPRIMER PLANO 1 #define LINEA HOE 2 #define DIAGOÑAL 3 #define TICDIAGONAL 4 #define DIAGONALINVRS 5 #define TICDIAGINVRS 6 #define REJA HOR 7 #define REJA-DIAG 8 #define P m - DENSO 9 #define PUNTO-LIGERO 10 #define PUNTO-MEDIO 11

#define RETICULA DENSA 13 #define RETICULAMEDIA 14 #define ROMBO 15 #def ine Tc 16 #define CUADRO LIGERO 17 #define CUADRO-MEDIO 18 #define CUADRODENSO 19 #define GATO 20 #define DIAMANTE 21 #define CRUZ 22 #define EQUIS 23 #define PORO LIGERO 24 #define PORO-MEDIO 25

#define TIC-T 26 #define HUELLA IZQ 27

#define VERT DENSA 29 #define HUELLA-HOR 30

#define TextColor setcolor #define TextBackground setbkcolor #define TextMode setgraphmode #def ine Eo1 ' \O /+ Define el fin de linea + / #define Eof 26 /+ Define el fin de archivo + /

#define ESC Esc #define FN (NI (Se+ (N%101) < < 8 /+ Macro que devuelve el co- + /

#define Shift-FN(N) (83+(N%10))<<8 /+ Macro que devuelve el co- + /

#define Ctrl_F"(N) (93+(N%10))<<8 /+ Macro que devuelve el co- +/

#define Alt-FN(N) (103+(N%10))<<8 /+ Macro que devuelve ei co- +/

#define Ctrl (L) (toupper ( (L) ) -65+1) I Ox0100 /+ Macro que devuelve el co- + /

#define MEZCLA 12

#define PORO-DENSO 12

#define HUELLA-DER 28

#define Esc 27 /+ Define el Escape +/

/+ digo de las teclas de + / /+ funcion F1 a F10 + /

/+ digo de las teclas de fun-+/ /* con Shift de la F1 a F10 +/

/+ digo de las teclas de fun-+/ /+ con Ctrl de la F1 a F10 + /

/+ digo de las teclas de fun-+/ /+ cion con Alt de F1 a F10 +/

/+ digo del la secuncia de +/ /+ control de una letra * /

/* TECLAS ESPECIALES */

#define Ini #define Up #define PgDown #define Lefth #define Rigth #define End #define Down #define PgUp #define Ins #define Del #define Alt Q #define AltW #define AltE #define AltIR #define Alt T -ne AltIY

b+

71<<8 72<<8 73<<8 75<<8 77<<8 7 9 < < 8 80<<8 81<<8 82<<8 83 < <8 16 < <8 17 <<8 18<<8 19<<8 20<<8 21<<8

2

Page 27: U niversidad Autónoma Metropolitana

Manual técnico Códigos fuentes

GrConI0Drv.H

#define Alt U #define Al t-I #define Alto #define AltP #define AltA #define Alt-C #define AltD #define Al t-F #define AltG #define AltH #define Al t-J #def ine Al t K #define Alt-L #define Alt Z #define Al tIX

#define Alt-C #define Alt-V #define AltB #define AltN #define Al t M #define Alt-1 #define Alt 2 #define Al t-3 #define Alt-4 #define Alt-5 #define Alt6 #define Alt7 #define Alt-8 #define Al t 9 #define Alt-O #define F11- #define F12 #define Shift F11 #define ShiftF12 #define Ctrl Pi1 #define CtrlFl2 #define Alt Fii #define AltF12

#define Lo (C) #define Hi (C) #define Byte #define Word #define Dvord #define relcol (C) #define relrow (C)

22<<8 23<<8 24<<8 25<<8 30<<8 31<<8 32<<8 33<<8 34<<8 35<<8 36 < <8 37<<8 38<<8 44<<8 45<<8

46<<8 47<<8 48<<8 49<<8 50<<8 120<<8 121<<8 122<<8 123<<8 124<<8 125 < <8 126<<8 127<<8 128 < <8 129<<8 133<<8 134<<8 135<<8 136 < <8 137<<8 138<<8 139<<8 140<<8

(C) hOxOOFF / * ( íC) &OxFFOO) > > E / * unsigned char /* unsigned int / * unsigned long /* ( (colhome+ (C) ) %MaxX) / * ( (rowhome+ ( C ) %MaxY) /*

Parte baja de un word * / Parte alta de un word * / Tipo Byte * / Tipo Word * / Tipo doble word * / Absisa relativa a home * / Ordenada relativa a home * /

struct PTS { Word x , y; I ; / * Estructura que define un punto en pantalla * /

struct SCREEN r FILE 'diskbuff; / * Archivo de memoria virtual de la pantalla char Name [15]; /* Nombre de la pantalla virtual Word tamano; / * Tams-o tipico de la imagen Word numln; / * Numero de lineas grabadas en cada acceso Word xi, / * Absisa inicial de la pantalla virtual

x f I /* Absisa final de l a pantalla virtual yi, / * Ordenada inicial de la pantalla virtual Yf ; / * Ordenada final de la pantalla vixtual

? ;

3

Page 28: U niversidad Autónoma Metropolitana

Nanual técnico

b

Códigos fuentes

G r C o n I O D r v . H

typedef struct SCREEN Screen;

struct WindVars I / * La siguiente estructura define una ventana con las * / / * variables de los diferentes estilos de presentacion * /

struct textsettingstype txttype; / * Tipo de texto de la vent * /

struct linesettingstype linetype; /* Tipo de linea de la vent * / . struct fillsettingstype flltype; /* Tipo de relleno * /

/ * Color del fondo * / char bk, fg. fr. frsize, *tit, tcur , t old cur, act ivG, 'charbuff, VideoMode;

Word XMin, XMax, YMin, YMax , xcur , YCUI ;

Screen 'videobuff;

/* Color del primer plano * / /* Color del marco y titulo * /

/ * Tipo de cursor de la vent*/ /* Tama.0 del marco * /

/* Titulo de la ventana * /

/ * Tipo de cursor anterior * / / * i si la ventana es activa*/ / * Apuntador al texto * /

/* Modo de video de la vent * / / * coordenada X inicial * / /* Coordenada X final * / / * Coordenada Y inicial * / /* Coordenada Y final * / / * X anterior del cursor * / /* Y anterior del CUISOI * /

/ * Apuntador pantalla de * / / * de respaldo de video * /

I ;

struct StackNodo { / * Estrucura que define * / struct WindVars *WD; /* un nodo de la pila de * / struct StackNodo 'WDDown; / * ventanas que controlan * / struct StackNodo *WDUp; / * su desplegado * / void *vd; I ;

struct PILA w { strÜct StackNodo 'Tope; /* PILA DE VENTANAS * /

I ;

struct PILA-W STACK;

int - Cdecl Makewindow (char *tit,struct WindVars *Mind, Screen -Cdecl backingvideo (int x i , int yi, int xf, int yf);

Cdecl restorevideo (Screen *SCl ; int Cdecl Savewindow (struct WindVars "wind); int Cdecl RestoreWindow (struct WindVars *Wind); int

. int - Cdecl scrollup (int xi, int yi, int xf, int yf, int n,int); int - Cdecl scrolldown (int xi, int yi,int xf, int yf,int n,int); int int int Cdecl gprintf (int,int,char *fmt, . . . ) ; void int - Cdecl readkeyword (void) ; void - Cdecl window (int xi, int yi, int xf, int yf); int - Cdecl framewindow (int xi, int yi, int xf,int yf, int CML,int PML,

int PATT, int COLOR, int SFR); int int int

int Cdecl pushwindow (struct WindVars *WD) ; struct StackNodo *

char 1 Cdecl GetChar (void) ; void - Cdecl GoToXY (int x , int y); void - Cdecl Setbkcolor (int c); void Cdecl Setcolor (int c); int -Cdecl - Getcolor (void) ; int - Cdecl Getbkcolor (void) ; int Cdecl setfillMode (int, int) ; tendif /*-UAM-GRDE * /

int Xi, int Yi, int Xf, int Yf, int bk, int fg, int fr);

- - -

Cdecl Clearwindow (struct WindVars *Mind): Cdecl gprintfxy (int xloc,int yloc,int, int, char *fmt, ... 1; - - 1 Cdecl Initialize (void) ;

Cdecl framesizehoriz (int SFR) ; Cdecl framesizevert lint SFR) ; Cdecl ClearRec (int xi, int yi, int xf, int yf, int bk, int co,

- - - int patt, int sln, int up, int tk);

Cdecl popwindow (void) ;

4

Page 29: U niversidad Autónoma Metropolitana

Manual técnico

/ *

C6digos fuentes GrWindows.iib

UNIVERSIDAD ADTONOMA METROPOLITANA.

IMPLEMENTACION DE LAS RUTINAS DE LA LIBRERIA

QUE COMO PROYECTO DE INVESTIGACION 11 PRESENTAN Los ALUMNOS:

UNIDAD G W I C A PARA LENGUAJE C ( O K s ) .

ALEJANDRO GRACIA TEROBA. LAZAR0 ISLAS SMVEDRA.

ASESOR INTERNO:

M.C. JORGE LOZANO MORENO. n*/ # if nde f UAMIGR- #define UAMI GR- # inc 1 ude-"gr coni o. h" # include 'I ini tvar s . SI c " #include "mouse4 . c"

/* Codigo fuente de la implementacion de las rutinas de GRCONI0.H * /

void Setbkcolor (int c) /* Esta rutina asigna el valor al intervalo de memoria que

las rutinas gráficas utilizan para rellenar el fondo de las imagenes

*/ I

int i, compose;

- bkcolor = c; compose = c + (c<<ü); for íi=4; i<=ü4; i++);

bakchar ti] = compose; I

int Getbkcolor 0 I

I return (-bkcolor) ;

int ClearRec (xi,yi,xf,yf.bk.co, patt, sln, UP. tk)

Esta rutina llena el cuadro especificado por l a s coordenadas /*

xi, yi, xf e yf con un tipo de relleno patt y los colores bk para el fondo y co para el primer plano

"/ int xi,yi,xf,yf,co, bk,patt, sln, up, tk; I

struct PTS ( int x; int y;

I outst41; struct linesettingstype oldlntype; struct fillsettingstype oldfilltype; int bkcolor, oldcolor, err; getlinesettings í&oldlntype); getfillsettings (&oldfilltype);

1

Page 30: U niversidad Autónoma Metropolitana

Manual técnico GrWindows.iib

Cbdigos fuentes

bkcolor = getbkcolor O ; oldcolor = getcolor O ; outs[oJ . x = xi; outsf01 .y = yi; OUtSfl] .x = xf; outs[ll .y = yi; outs[2] . x = xf; outsI21 . y = yf; outs[3] . x = xi; outs[3] .y = yf; setf illMode (patt,bk) ; setlinestyle (sln,up, tk) ; setcolor (co) ; Setbkcolor (bk) ; fillpoly( 4 , (int far +)outs); err = graphresult O ; Setbkcolor (bkcolor) ; cetcolor (oldcolor) ; setfillMode(oldfilltype.pattern, oldfilltype.color); setlinestyle(oldlntype.1inestyle. oldlntype.upattern, oldlntype err = graphresult O; return (err) ;

I

thickness) ;

int Makewindow (tit,NWind, Xi, Yi, Xf, Yf, bk, fg, fr) /*

Esta r u t i n a asigna el e s p a c i o en memoria n e c e s a r i o para d e f i n i r una ventana g r á f i c a , a s i mismo i n i c i a l i z a l o s v a l o r e s n e c e s a r i o s para su uso por l a s demas r u t i n a s

*/ char +tit; struct WindVaxs +Wind; int Xi,Yi,Xf,Yf; char bk,fg,fr; I

int err=O;

Wind = (struct WindVars + ) malloc (sizeof(struct WindVars)); if (!Wind) xeturn ( - 6 ) ; Wind->videobuff = (Screen + ) malloc (siteof (struct SCREEN)) ; if [!Mind->videobuff) return 1-61; Wind->videobuff->xi=Xi; Wind->videobuff->xf=Xf; Wind->videobuff->yi=Yi; Mind->videobuff->yf=Yf; / + Nwind->charbuff =(char + ) malloc ((Xf -Xi) + (Yf -Yi) /56) ;

instruccion no valida + / Wind->tit = (char * ) malloc (Xf-Xi); if (!Wind->tit) return ( - 6 ) ; ctrcpy (Wind->tit,tit) ; NWind->XMin = Xi; NWind->Wax = Xf; Wind->YMin = Yi; Wind->YMax = Yf; Wind->bk = bk; Wind->fg = fg; Wind->fr = fr; Wind->t CUI = 245; Wind->active = O; Wind->VideoMode = getgraphmode O; err = graphresult O ; if (!err) gettextsettings (&(Wind->txttype)) ;

if (!err) getfillsettings (&(Wind->flltype)); erx = graphIesult O;

err = graphresult O; return (err) ;

2

Page 31: U niversidad Autónoma Metropolitana

Manual técnico

/I

Códigos fuentes

1

/'

+/ I

I

Rutina interna a la unidad gráfica, su función consiste en construir un nombre único para un archivo de mapa de bit's que se utilizará como memoria virtual para respaldar el video del la pantalla.

char 'nombre;

- Num win-[3] = O; nombIe = (char '1 malloc (15); memset (nombre,NüLL,i5) ; strcat (nombre,"C:UAMI") ; strcat (nombre, Num win 1; if (-Num-win-í2~ ==-I9

Num win [21 = 'O'; {

Tf (rNumrwin-[ll == '9')

eise ~~

Num win [2]= Num_win-[21 + 1; reTurñ (nóÍmbre);

Screen 'backingvideo íxi,yi,xf,yf) /*

E s t a rutina tiene como función el respaldar el video en la memoria secundaria, se utilizo la memoria secundaria como memoria virtual por ser ésta mas grande que la prin- cipal.

+/ int xi,yi,xf,yf; I

Scxeen 'SC; void far *tmp; FILE 'fopen 0 ; Woxd tamano, y, sizeln, lasty, numlns, incdif, holatmp; char 'Name; int err ;

3

Page 32: U niversidad Autónoma Metropolitana

Manual técnico G r W i n d o w e . l i b

SC = (Screen * I malloc (sizeof (struct SCREEN) ; if (!SC) return ( - 6 ) ; sizeln = imagesize (xi, 1 ,xf ,i) ; Name = (char + ) ConstructNom 0 ; SC->diskbuff = fopen (Name,"wb") ; if (!SC->diskbuff) return (-7); incdif = (Word) ( (Word) 32384/sizeln) ; numlns = incdif + yi; Y = yi; lasty = yf > numlns ? numlns : yf; tamano = (lasty-y) sizeln; SC->tamano = tamano; SC->numln = incdif; do

{ lasty = yf > numlns ? numlns : yf; tamano = (lasty-y) * sizeln; tmp = malloc ((Word) tamano) ; if (!tmp) return (-6); getimage (xi,y,xf,lasty, (void far * ) tmp); fwrite (tmp, (Word) tamano, (Word) 1, SC->diskbuff) ; if (err = ferror íSC->diskbuff)) return (err) ; y = lasty; numlns = numlns + incdif; free (tmp);

1 while íyf > lasty); strcpy (SC->Name, Name) ; SC->xi=xi; SC->yi=yi; SC->xf=xf; sc- >yf =yf ; fclose (SC->diskbuff); return (SCI;

1

Códigos fuentes

int restorevideo (SC) /*

Esta funcibn tiene como objetivo cargar de un archivo preparado anteriomente con backingvideo, y desplegar su contenido en pantalla, cabe mencionar que el archivo debe estar en un formato de mapa de bit's, y que el modo de video debe ser compatible.

'/ Screen +SC; I

void far *tmp; Word tamano, y;

SC->diskbuff = fopen (SC->Name,"rb") ; trnp - malloc ((Word) 32384); if ( ! tmp) return (-6) ; y = SC->yi; do

I tamano = (Word) fread (tmp, (Word) SC->tamano, (Word) 1, SC->diskbuff); if (ferror(SC->diskbuff)) return ( - 7 ) ; putimage (SC->xi,y,tmp, COPY PUT); y = sC->yf > (y + SC->numin)-? (y + sC->numin) : sc->yf;

1 while (tamano == 1 && y < SC->yf);

Instrucción que ser6 activada posteriormente / * unlink (SC->Name) ;

+ / free (tmp); fclose (SC->diskbuff); return ( O ) ;

I

4

Page 33: U niversidad Autónoma Metropolitana

Manual técnico Códigos fuentes

int scrollup (xi,yi,xf,yf,n,color)

Esta función realiza un desplegado hacia arriba del contenido que se encuentra entre las cordenadas especificadas en un nu- mero n de renglones (pixeles) y llena el espacio del color dado

/*

*/ int xi,yi,xf,yf,n,colox; r

int err; void 'buffvideo;

buffvideo = (void + ) malloc (imagesize(xi,yi,xf, (yf -n)) 1 ; getimage (xi,yi+n,xf,yf,buffvideo); erx = graphresult 0; put image (xi ,yi, buf fvideo, O ) ; err = graphresult O ; err = ClearRec (xi,yf-n,xf,yf,coior,co~or,l,O,O,O); if (buffvideo) free (buffvideo) ; xeturn (err) ;

I

int scrolldown (xi,yi,xf ,yf ,n,color)

Esta función realiza un desplegado hacia abajo del contenido que se encuentra entre las coordenadas especificadas en un nu- mero n de renglones (pixeles) y llena el espacio del color dado

/*

*/ int xi,yi,xf,yf,n,color; I

int err; void 'buffvideo; int bkcolor;

buffvideo = (void * ) malloc (imagesize(xi,yi,xf, (yf -n) 1 ) ; getimage (xi,yi,xf ,yf -n.buffvideo) ; erx = graphresult 0; bkcolor = getpixel (xf ,yf 1 ; putimage (xi,yi+n,buffvideo,O); err = graphresult O ; err = ClearRec (xi,yi,xf,yi+n,color,color,l,O,O,O); free (buffvideo) ; return (err) ;

I

void Initialize (void)

Esta rutina es la primera que se tiene que usar y es obligatoria, en ella se inicializan las variables y procesos necesarios para el funcionamiento del la unidad gráfica

/*

*/ ( int xasp, yasp, err; /* Used to read the aspect ratio*/

STACK.Tope = NULL; GrapMx iver = DETECT; /+ Request auto-detection */ initgraphí &GrapMriveI, hGraphMode, " I ' 1 ; exr = graphrecult 0 ; /* Read result of ini tiaiiza tion*/ if ( err ! = grOk í /* Error occured during init */

1 getpalette ( &palette ) ; /* Read the palette from board */ MaxCoiors = getmaxcolox0 + 1; /* Read maximum number of colors*/ maxcollength = MaxX = getmaxx0; maxrowlength = MaxY = getmaxy 0 ; /* Read size of screen */ colhome = cuxrentrow = O ; rowhome = currentcol = O ; getaspectratio( &xasp, hyasp 1 ; /* read the hardware aspect */ AspectRatio = (doub1e)xasp / (doub1e)yasp; /+ G e t correction factor */

printf ( " Graphics System Error: %s\n", grapherrormsg(err) ; exit( 1 ) ;

Setbkcolor (getbkcolor 0 ; SetPixeltoMickey (MaxX, MaxY);

I

5

Page 34: U niversidad Autónoma Metropolitana

Manual técnico

í

1

ir

I

Códigos fuentes

maxcollength = xf - xi; naxrowlength = yf - yi; colhome = xi; rowhome = yi; currentcol = O ; currentrow = O ;

t Clearwindow (Wind) /* Esta funcián realiza un relleno del área de datos de la

ventana que tiene como parametro, utilizando para eso l o s atributos que se definieron al contruirla con makewindow

*/ s'ruct WindVars *Wind;

(1earRec (Wind->XMin, Wind->Win, Wind->XMax, Wind->Wax, Wind->bk,Wind->fr,NWind->flltype.pattern, NWind->linetype.linestyle,NWind->linetype.upattern, Wind->linetype.thickness);

c:uIrentcol - O ; urrentrow = O ;

1

mind - > tx t type. char size) ;

Wind->linetype.thickness); r:etlinestyle (Wind->linetype.linestyle,NWind->linetype.upattern,

:;etfillMode (Nwind->flltype.pattern,NWind->flltype.colo~) ; ':eturn ( O ) ;

6

f

int pushwindow (WD) /* Esta función mete una ventana en la pila, respaldando el video

que esta abajo de ella, el tipo de pila no es presisamente una pila ya que esta ofrece la posibilidad de sacar nodos que no nr- cesariamente estan en el tope.

*/ struct WindVaxs *WD;

struct CtackNodo +Nodo; void +sc; int err = O ;

Nodo = (struct CtackNodo * ) malloc (sizeof (struct StackNodo) 1 ; if (!Nodo) return ( - 6 ) ; sc = (void + ) malloc (imagesize (WD->XMin,WD->YMin,WD->XMax,WD->Wax)); if (!scl return ( - 6 ) ; Nodo- >vd = sc ;

Page 35: U niversidad Autónoma Metropolitana

1

Manual técnico

I,

G r W i n & w s . i i b Códigos fuentes

if (STACK.Tope) I

/+ La pila contiene a i menos una ventana +/ STACK.Tope->WDUp = Nodo; /+ El nodo actual se llena con +/

Nodo - >WDUp = NULL ; /+ Se inicializa el nodo de +/

/+ la informacion del nodo de +/ /+ nueva creacion +/

Nodo->WDDovn = STACK.Tope; /+ nueva creación +/ I

else I /+ La pila esta vacia */ Nodo->WD = WD; Nodo->WDDown = NULL; Nodo - >WDUp = NULL ;

I ; Nodo->WD = WD;

/+ Nodo->vd[O] =WD->XMin; Nodo->vd=WD-> I2lXMax; Nodo->vd [l] -WD- >Win; Nodo- >vd=WD-> [31 YMax; * + + * * ~ * + + ~ * * + + + ~ * + * * getimage (Nodo- >vd [O] ,Nodo- >vd [l] ,Nodo- >vd [21 ,Nodo- >vd [31 , sC) ; * * * + * * * * / STACK.Tope = Nodo; Restorewindow (WD) ; WD->active = 1; windov (STACK.Tope->WD->XMin+framesizehoriz(STACK.Tope->WD->frsize),

STACK.Tope->WD->YMin+framesizevert(STACK.Tope->WD->fxsize), STACK.Tope->WD->XMax-framesizehoriz(STACK.Tope->WD->frsize), CTACK.Tope->WD->YMax-framesizevert(STACK.Tope->WD->frsize) ) ;

return (err) ; 1

struct StackNodo *popwindow (void) /+ Esta función saca una ventana del tope de la pila, y la

despliega en pantalla, es decir cierra l a ventana actual y abre la ventana inmediatamente anterior a esta.

* / I

struct StackNodo +pi int err;

p = STACK.Tope; if ( !STACK.Tope)

else I xeturn (NULL) ;

currentcol = STACK.Tope->WD->Xcur; currentcol = CTACK.Tope->WD->Ycur; STACK.Tope->WD->active = O ; if (!err) xeturn (NULL) ; STACK.Tope->WDDovn->WDUp = NULL; STACK.Tope = STACK.Tope->WDDown; window (STACK.Tope->WD->XMin+framesizehoriz(STACK.Tope->WD->frsize),

STACK.Tope->WD->YMin+framesizevert(STACK.Tope->WD->fxsize), STACK.Tope->WD->XMax-framesizehoriz(CTACK.Tope->WD->frsize), CTACK.Tope->WD->YMax-fxamesizevert(STACK.Tope->WD->fxsize) 1;

free íp) ; I ; return (CTACK.Tope) ;

I ;

int SaveWindov (Wind) /+ Esta función graba el contenido de una ventana en disco usando

para ello un formato estandarizado, el formato usado es el PCX por ser este uno de los mas usados por las erramientas gráficas conocida s.

struct WindVaxc *NWind; t

+/

int exr; int XMax=NWind->XMax,XMin=Wind->XMin,Wax=NWind->YMax,YMin=NWind->YMin;

7

Page 36: U niversidad Autónoma Metropolitana

Manual técnico Códigos fuentes Grwindows.lib

if (getgraphmode ( ) == Wind->VideoMode) I getimage (XMin,YMin,)[Max,YMax,NWind->videobuff) ; Wind->Xcur = currentcol; Wind->Ycur = currentrov; gettextsettings (&(NWind->txttype)) ; getlinesettings (&(Nwind->linetype) ; getfillsettings (&(Wind->flltypel) ; Wind->bk = getbkcolorí); Wind->fg = getcolor O ;

1; err = graphresult O ; return (err) ;

1

int Res tor eW indow [NW ind)

E s t a r u t i n a l e e una ventana que haya s i d o grabada a n t e r i o r m e n t e /*

*/ con savewindow pon iendo s u c o n t e n i d o en l a memoria v i r t u a l .

ctruct WindVars "wind; I

int err; int YMin=NWind- >YMin,XMin=Wind- >xMin;

if (Wind- >VideoMode == getgraphmode í ) ) ; { putimage(XMin,YMin,NWind->videobuff,COPY-PUT); currentcol = Wind->Xcur; currentrov = Nwind->Ycur; setcolor (Wind- >f I) ; Setbkcolor (Wind- >bk) ; settextstyle (mind->txttype.font,NWind->txttype.direction,

setlinestyle (NWind->linetype.linestyle,NWind->linetype.upattern,

setfillMode (Wind->flltype.pattern,Wind->flltype.color);

Wind->txttype.charsize);

Wind->linetype.thickness);

1; err = graphresult O ; return (err) ;

1

int readkeyvord (void)

E s t a r u t i n a lee el e s t a d o d e l t e c l a d o , hac iendo una pausa /*

h a s t a que se haya p u l s a d o una tecla, r e g r e s a el cod igo ya d e f i n i d o en e l encabezado con a t e r i o r i d a d para l a s t e c l a s e s p e c i a l e s o el c o d i g o a s c i i para l a s normales .

*/ char c a r , ex t : int caractdr; union REGS inregs, outregs;

inregs.x.ax = O; intü6 (Oxl6,&inregs,&out1egs) ; car = outregs.h.al; ext = outregs.h.ah; caracter = car + (ext<<üI; return (caractex) ;

8

Page 37: U niversidad Autónoma Metropolitana

Manual técnico

I

GrWindowe . l i b Códigos fuentes

char GetChar (void)

Esta función lee un caracter desde teclado o el estado del ratón, devolviendo ya sea la tecla presionada o las coordenadas y el botón que se presiono.

/*

*/ I

int x, y, 1. backcolor, frcolor, TxtSzeH, TxtSzeV; int yi,yf ;

yi = getmaxy O - 25; yf = yi + 17;

if ( Mouse present) SEowMouse O ;

x = relcolícurrentcol) y = relrow (currentrow)

backcolor = getpixelíx frcolor = getcolor 0 ;

imgcur [O] = TxtSzeH = imgcux [ 2 ] = TxtSzeV =

while í !&hit 0

textwidth ("H") ; textheight ("H'') ;

put image (x , y, imgcur , COPY-PUT) ; delay (ticursor) ; putimage (x ,y , imgcur,XOR-PUT) ; delay (ticursor) ;

if (Mouse-present) I

Mouse-Status = MousePosition

I I if (MouseStatus !I O)

( LMouseX, &Mouse-Y 1 ;

HideMouse í ; - MouseStatus = MousePosition (hMouseX,hMouse-Y); - Mouse-Y = (Mouse-Y - 1) + 8; - Mouse-X = (Mouse-X - 1) + 8; return (~MouseBoutom[~Mouse~Statusl~; I ;

I ;

I ;

1 = getch O ;

switch (1) I case O : 1 = getch O ; case 8: /* Se tecleo el retroceso de carro */

1 = o ; x - = TxtSzeH-1;

ClearRec (~-2.y-l,x+TxtSzeH+l,y+TxtSzeV+l,

if ( (currentcol-TxtSzeH-2) < O) backcolor,frcolor,l,O,O,O~;

I

1 else

cuxrentcol - = TxtSzeH+l; break;

currentcol = colhome+maxcollength- (TxtSzeH+l); currentrow - = TxtSzeV-1;

case 13: /* Se tecleo el retorno de carro */ ClearRec (x,y,x+TxtSzeH,y+TxtSzeV,backcolor,fxcolox,l,O,O,O~; break;

9

Page 38: U niversidad Autónoma Metropolitana

Manual técnico

( 8

GxWindowa . l i b

default: gprintf (f rcolor , backcolor, ''RC", 1 ) ; break;

I ; . if ( Mouse present)

HicdeMouce 0 ; return ( 1 ) ;

1

Cbdigos fuentes

/++*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++/ /+ +/ /+ RUTINAS DE CONTROL DEL DESPLBOAW +/ /+ +/ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

void GoToXY (x, y )

Esta función posiciona el cursor gráfico en ia posicidn /*

*/ dada en pixeles.

int x, y ; I

x = (int) x ; y = (int) Y ; currentcol = x (textwidth ("H")+l); currentrow = y (textheight ("H")+l);

I

void clrscr (void)

Esta funcion limpia la pantalla, o la ventana actual /*

*/ I

I

ClearRec (colhome,rowhome, colhome+maxcollength, rovhome+maxrowlength, getbkcolorí) ,getcolor~),l,O,O,O);

/++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++/ /+ +/ /+ RUTINAS DE A!FRIBUTOS DE DESPLEGADO +/ /+ +/ / t + t t + t C C t t + t t C t + + t t + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + t t + + + + + + + ~ + + + + C + /

int setfillMode (int, int);

int setfillMode (patt, color)

/* Esta funcion establese el tipo de relleno a utilizar,

a los tipos utilizados en Turbo graphics se aunan otros definidos en la iniciación de variables de la unidad.

*/

int patt, color; 1

int ers=ü;

10

Page 39: U niversidad Autónoma Metropolitana

Manua 1 técnico G r W i n d o w s . l i b

if (patt > 11) if (pat t <3 1) setfillpattern (&patterns [patt-121 [ O 1 , color) ; el se err = - 1 4 ;

else setfillstyle (patt.co101);

return (err) ; 1

int framewindow (xi, yi, xf, yf, CML, PML, P A T T , COLOR, SFR)

Dibuja el marco de una ventana con los atributos dados, como son color del marco, tipo de relleno del marco, color del interior de la ventana y tipo de relleno del interior de la ventana.

/*

+/

int xi, yi, xf, yf, CML, PML, F A R , COLOR, SFR; I

int fgcolor, XI, yx, WidthFr, CMLB; struct fillsettingstype fillback;

if (GxaphDriver==l 1 1 GxaphDriver==2 I 1 GxaphDriver==7) i CML 5 o ; P A T T - 29; PML = 29; COLOR = 1:

I

WidthFr = SFR%10; fgcolor = getcolor 0 ; getfillsettings (hfillback); XI = (int) (MaxX/FrameRatioX [GxaphDriver] [GraphModel ) CWidthFr ; yx = (int) (MaxY/FxameRatioY [GraphDxiver] IGraphModel ) *WidthFx ; ClearRec (xi,yi,xf,yf,COLOR ,fgcolor,1,0,0,0);

if (SFR > O) I setcolor (O) ; rectangle (xi+xr,yi+yr,xf-xr,yf-yr); xectangle (xi,yi,xf ,yf) ; setfillMode (PML ,CMLI ; floodfill (xi+l,yi+l,O);

I el se

I

I ;

CML = COLOR; PML = 1;

if (CML ! = 8 )

else CMLB = (CML+8)%16;

CMLB = 15;

/* Realce de Marco +/

setcolor (O) ; if (GraphDriver ! = 1 && GraphDriver ! = 2)

line (xi+2,yf -1,xf ,yf -1) ; line (xi+i,yf ,xf ,yf 1 ; line (xf, y++i,xf, yf 1; line (xf -i,yi+2,xf -1,yf ) ;

line (xi+3,yf -2,xf .yf - 2 ) ;

Códigos fuentes

11

Page 40: U niversidad Autónoma Metropolitana

Códigos fuentes Manual técnico G r W i n d o w 8 . l i b

if ( S F R > O)

rectangle (xi+xr,yi+yr.xf-xr.yf-YX); /* Chaflan ext */

setf illMode (9, CML) ; floodfill (xi+xr+l,yi+YI+l.o); ClearRec (xi+xr+6,yi+yr+3,xf-xx-5,yf-yr-3.COLOR ,fgcolor8PATT.O,O,0);

setcolor (7) ; line (xi+xr,yi+yr,xi+xr,yf-yI); line (xi+xr,yi+yr.xf-xr.yi+yr): line (xi+xr+~,yf -yr-3,xf -xr-S,yf-yr-3) ; 1 ine (xf -xx -6, yf -yr - 3, xf -XI -6 ,Y i+yr+3) ;

setcolor (O) ; line (xi+xr+6,yi+yr+4,xi+x1+6,yf -yr-4) ; line (xf -xr+i,yi+yx,xf -xi+i,yf -p); line (xi+xr+S,yi+yr+3,xf -xr-6,yi+yr+31 ;

I ( x i + x r + ~ , y i + y 1 + 3 , x f - ~ ~ - ~ , ~ f - ~ 1 - 3 ) ; /* Chaflan int */

I else

( if (GraphDriver==l 1 1 GraphDrive1==2 I I GrapMriver==7) [ /* Solo cuando tenemos Monocromatico */ setcolor ( O ) ; ClearRec (xi+2,yi,xf,yf,l,l.29,0,0,0); line (xi+3,yf -i,xf ,yf -1) ; line (xi+i,yf ,xf ,yf 1 ; line (xf ,y1 ,xf, yf); line (xf -1,yi.xf -i,yf) ; line (xf -3,yi+i,xf -3,yf) ;

1 1

setcolor (fgcolor) ; setfillMode (fillback.pattern, fillback.color1; return (xr*2) ;

I

int framesizehoriz (SFR) /* */ ' Regresa el tamaño horizontal en pixeles que ocupa el marco

return( (int) (lO+MaxX*3/FrameRatioX [GraphDriver] [GraphModel * (SFR%10) ; {

l

int framesizevert (SFR) /*

*/ Regresa el tamaño vertical en pixeles que ocupa el marco

return( (int) (4+MaxY*3/FrameRatioY [GraphDriver] [GraphModel 1 (SFR%lO) 1

1 ;

/***********+* PIN DE LAS R l J T W S DE ATRIBüTOS DEL DESPLEGADO *************/

int gprintfxy(int x1oc.int y1oc.int color,int bk,char *fmt, ... ) / *

Escribe en pantalla una cadena formateada, en las coordenadas y con el color especificados. para mayor referencia consulte al manual de referencia.

*/ I va list argptr; char str (1401 ; int cnt.c:

c = getcolor 0 ; va-start ( argptr, format 1 ;

/* Argument list pointer */ /* Buffer to build sting into */

/* Result of SPRINTF for return */

/* initialize va- functions */

12

Page 41: U niversidad Autónoma Metropolitana

xanual técnico Códigos fuentes GrWindows.1i.b

cnt = vsprintf ( str, frnt, argptr 1; /* prints string to briffer */

CleaxRec (xloc,yloc,xloc+textwidth(str) ,yloc+textheight ("H") +1,

setcolor (color) ; outtextxy( xloc, yloc+l, str ) ; /* Send string in graphics mode */

if (GraphDriver == 1 1 1 GraphDriver == 5 1 1 GraphDrivex == 7 )

- setfillMode (29,O);

bk, bk, 1, O, O, O) ;

floodfill (xloc+l,yloc+textheight ("H") 11.0) ; I ;

setcolox (c) ; vaend( argptr 1 ; return( cnt 1;

/* Close va functions */ /* Return fie conversion count */

int gprintf(int color, int bkcolor, char 'fmt, ... 1

/* Escribe una cadena formateada en pantalla en la posición

actual del cursor con los colores de fondo y primer plano especificados, para moyor información consul te el manual de referencia.

*/

I int x=O,y=O,i=O, oldcolor; va list argptr; /* Argument list pointer */ char str [2001, car [21 ; /* Buffer to build sting into */ int cnt; /* Result of SPRIhl'F for return */ x = relcol (currentcol) ; y = relrow (currentrow) ; oldcolor = getcolor 0 ;

cnt = vsprintf ( str, fmt, argptr ) ; /* prints string to buffer */ vhile (str [ill {

va-start( argptz, format 1; /* initialize va- functions */

if ( (x+textwidth ("H") ) > (colhome+maxcollength) 1 sal toln: currentcol=O; currentrow = curIentIow+ (int) (textheight ("H") '1.29) ; x = relcol ícurrentcol); y = relrow (currentrow); if í (y+ (int) (textheight ("H") 1.1.25) > (rowhome + mexrowlength) ) i currentrow = currentrow - (int) (textheight ("H")*1.25) ; y = relrow (currentrow); scrollup (colhome,rowhome,colhome+maxcollength,

currentcol = O; rowhome+maxrowlength, (int) (textheight ("H") '1.25) ,bkcolor) ;

I ; I

el se r I x = relcol (currentcol): y = relrow (currentrow); car103 = strIi1; ~ariil = ' \ O ' ; 1++; if (carIO] == *\no) goto saltoln; CleaIRec (~,y,x+textwidth(car),y+textheight(car)+l,

if (GraphDriver == 1 1 1 GraphDriver == 5 I ( GraphDriver == 7 )

el se

outtextxy( x, y, car); /* Send string in graphics mode */

bkcolor, bkcolor,l,O,O,O);

setcolor ( O ) ;

setcolor (color) ;

13

Page 42: U niversidad Autónoma Metropolitana

Manual técnico

k

GrWhdows . lib

if (GraphDriver == 1 1 ) GraphDrivez == 5 ) I GraphDriver == 7 ) [ setf illMode (29, O ) ; floodfill (x+4,y+textheight('~ii")+l,O); floodfill (x+3,y+l,O); floodfill (x+3,~+3.0); floodfill íx+3,y+5,0); floodfill (x,y+2,0);

I currentcol += textvidth (car) 1; setcolor (oldcoloi ;

1 ] /* end whi le */

vaendí argptr 1 ; /* Close va- func t ions

Códigos fuentes

*/

Ieturn( cnt ) ; /+ Return the conversion count */

I

14

Page 43: U niversidad Autónoma Metropolitana

Manual técnico INITVARS . H

/* UNIVERSIDAD AUTONOMA METROPOLITANA.

Códigos fuentes

INICIALIZACIOIS DE VARIABLES DE LA UNIDAD GBMICA PARA LENGUAJZ C (OKs) .

QW COM3 PROYECTO DE IWVXSTIOACION I1 PRESENTAN Los ALUMNOS:

ALEJANDRO -CIA TEROBA. LAZAR0 Isms SAAVEDRA. ASESOR INTERNO:

M.C. JORGX LOZANO MORENO.

#ifndef -unigr-uarni- #define -unigr-uarni-

static double AspectRatio; /* Aspect r a t i o o f a pixel on the screen */ static int GraphDriver; static int GraphMode,

*/ MaxX, MaxY,

*/ MaxColors,

*/ currentcol,

ventana */ cur1 entrow, /* Renglon actual r e l a t i v o a l a ventana

*/ maxco 1 length, /* Maxima longitud de renglon de

maxr owleng th, /* Maxim0 longitud ver t i c a l de

colhome , /* Columna absoluta de i n i c i o de l a

r owhome /* Renglon absoluto de i n i c i o de l a

- bkcol or I S tyl-image,

ticursor=200; /* Retardo de l parpadeo para el CUISOI

/* Modo graf ico por d e f a u l t

/* Maxima resolucion de p a n t a l l a

/* Maxim0 numero de co lores d i spon ib l e s

/* Columna ac tua l r e l a t i v a a l a

desplegado */

despi egado */

ventana ac tua l */

ventana ac tua l */

*/ */

/ * E s t i l o de imagen por d e f a u l t

1

Page 44: U niversidad Autónoma Metropolitana

Manual t é c n i c o

~

INITVARS . II Cbdigos fuentes

static struct fillsettingctype Styl-fill;/* E s t i l o de re l leno por de fau l t */ static struct linesettingstype Styl-line;/* E s t i l o de l i nea por defau l t */ static struct textsettingstype Styl-text;/* E s t i l o de texto por defau l t */ static struct palettetype palette; de fau l t */ static struct PILA-W STACK; */

/* Paleta def inida por

/* Pila de ventanas

/* El siguiente arreglo define la imagen que se utilizará para la imagen del cursor */

static char imgcurt841 = {8, O, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF,

9 , o , OxFF, OxFF , OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF ,

OxFF, OxFF, OxFF , OxFF, OxFF, OxFF , OxFF, OxFF, OxFF, OxFF,

OXFF, OxFF, OxFF , OxFF, OxFF , OxFF , OxFF, OxFF, OxFF, OxFF,

OxFF, OxFF, OxFF, OxFF, OxFF, OxFF , OxFF, OxFF, OxFF, OxFF ,

OxFF , OxFF, OxFF , OxFF, OxFF , OxFF, OxFF , OxFF, OxFF, OxFF,

OxFF , OxFF , OxFF , OxFF, OxFF, OxFF, OxFF; OxFF, OxFF, OxFF) ;

/* El siguiente arreglo define la imagen que se utilizará como caracter de relleno */

static char bakchart841 = {8, O, 9 , O , OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF,

OxFF , OxFF, OxFF, OxFF, OxFF, OxFF, OxFF , OxFF, OxFF , OxFF,

OxFF, OxFF, OxFF, OxFF , OxFF, OxFF, OXFF, OxFF, OxFF, OxFF ,

OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF, OxFF , OxFF ,

OxFF, OxFF , OxFF, OxFF , OxFF, OxFF, OxFF, OxFF, OxFF , OxFF} ;

2

Page 45: U niversidad Autónoma Metropolitana

Manual técnico

*

INITVABS If Códigos fuentes

s t a t i c char { o m , { 0x33, { OxFO, { 0x00, { 0x00, { 0x00, { 0x00, { oxoo, { 0x00,

{ 0x00, { 0x00,

{ OxFF,

/* los tipos de rellenado que utiliza la unidad gráfica

~l siguiente arreglo define las extenciones para */

p a t t e r n s [ ] (81 = 0x55, O m , 0x55. 0x33, OxCC, OxCC, OxFO, OxFO, OxFO, 0x10, 0x28, 0x44, 0x70, 0x20, 0x27, 0x00, 0x00, 0x18, 0x00, Ox3C, Ox3C, 0x7Ef Ox7E. Ox7E, 0x00, 0x22, 0x08, 0x7Ef Ox3C, 0x18, 0x10, 0x10, Ox7C, 0x42 , 0x24, 0x18,

o-, 0x33 , OxOF, 0x28, 0x24 , 0x18 , Ox3C. Ox7E , ox00 , 0x18, 0x10, 0x18,

0x55 , 0x33 , OxOF, Ox10 , 0x24 , ox00 , Ox3C, Ox7E , 0x22 , Ox3C, 0x10, 0x24 ,

o m , oxcc , OxOF, ox00 , 0x07, ox00 , 0x00, Ox7E , O X l C , Ox7E, 0x00, 0x42,

0x55 1 ,

OxOF I , oxcc I , ox00 I , oxoo I , ox00 I , ox00 I , ox00 I , ox00 I , ox00 I , ox00 I , OxFF I ,

{ 0x7Ff OxF7, Ox7F, OxF7, 0x7Ff OxF7, 0x7Ff OxF7 1 , { OxDD, 0x77, OxDD, 0x77, OxDD, 0x77, OxDD, 0x77 I , { 0x88, Oxll, 0x88, Oxll, 0x88, Oxll, 0x88, 0x11 1 , { OxF4, 0-8, OxF2, OxAC, OxF4, OxDA, OxFO, OxEC I , { 0x36, OXOF, OxSB, Ox2F, 0x35, 0x4Ff OxlB, Ox2F 1 , { 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55 I , { 0x00, 0x22, 0x88, 0x33, 0x99, 0x55, O m , 0x55 1 ,

I ;

/* Estos arreglos paramatrizan los diferentes tipos de dispositivos de desplegado con una razón de tamaño para

pantalla tanto vertical como horizontalmente */

FrameRatioX i l l 1 [61 1, 1, 1, 1,

220, 220, 220 , 2 2 0 , 2 0 0 , 2 0 0 , 2 0 0 , 2 0 0 , 2 0 0 , 2 0 0 , 200, 200, 2 0 0 , 2 0 0 , 200 , 2 0 0 ,

200, 200, 200, 200, 100, 100, 100, 2 0 0 , 2 0 0 , 2 0 0 , 200, 2 0 0 , 2 0 0 , 200 , 200, 2 0 0 ,

8 0 , 80 , 80 , 1 2 0 ,

400 , 2 0 0 , 4 0 0 , 2 0 0 ,

3

Page 46: U niversidad Autónoma Metropolitana

Manual técnico

//

INITVARS H Códigos fuentes

Fram 1, 50. 80,

150, 150, 150, 220, 120, 120, 1 5 0 , 150 ,

ieRatioY [ill (63 = 1, 1, 1, 1 I , 50, 50, 70, 50 3 , 80, 80, 80, 80 1 ,

120, 150, 120, 1 5 0 3 , 120, 150, 120, 150 1 , 150, 150, 150, 150 I , 190, 220, 190, 220 I , 120, 120, 120, 120 3, 120, 120, 120, 1 5 0 1 , 190, 120, 150, 190 1 , 150, 150, 150, 150 1 ,

/* Arreglo de parametrizadon de colores

s t a t i c int mapcolor [111 161 1161 = I

*/

4

Page 47: U niversidad Autónoma Metropolitana

Manual técnico

( 8

INITVARS H Cbdigos fuentes

{ ~ 0 , 1 , 2 , 3 , 0 , 1 , 2 , 3 , 0 , 1 , 2 , 3 , 0 , 1 , 2 , 3 1 , ~0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,31, ~ 0 , 1 , 2 , 3 , 0 , 1 , 2 , 3 , 0 , 1 , 2 , 3 , 0 , 1 , 2 , 3 1 , ~ 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 1 , ~ 0 , 1 , 2 , 3 . 0 , 1 , 2 , 3 , 0 , 1 , 2 , 3 , 0 , 1 , 2 , 3 1 , ~0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,311,

I {0 ,1 ,2 ,3 ,0 ,1 ,2 ,3 ,0 ,1 ,2 ,3 ,0 ,~ ,2 ,3~ , { 0 , 1 , 2 , 3 , 0 , 1 , 2 , 3 , 0 , 1 , 2 , 3 , 0 , 1 , 2 , 3 } , ~0,1 ,2 ,3 ,0 ,1 ,2 ,3 ,0 ,1 ,2 ,3 ,0 ,1 ,2 ,3~, ~ 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 1 , ~0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,31, ~0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,311,

~0 ,1 ,2 ,3 ,0 ,1 ,2 ,3 ,0 ,1 ,2 ,3 ,0 ,1 ,2 ,3~ , ~0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,31, ~0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,31, ~ o , i , o , i , o , l , o , i , o , i , o , i , o , i , o , i } , I 0 , 1 , 2 , 3 , 0 , 1 , 2 , 3 , 0 , 1 , 2 , 3 , 0 , 1 , 2 , 3 1 , ~0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,311,

~0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,31, ~0 ,1 ,2 ,3 ,0 ,1 ,2 ,3 ,0 ,1 ,2 ,3 ,0 ,1 ,2 ,3~ I

~0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,31, ~ 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 1 , I 0 . 1 , 2 , 3 , 0 , 1 , 2 , 3 , 0 , 1 , 2 , 3 , 0 , 1 , 2 , 3 1 , ~0 ,1 ,2 ,3 ,0 ,1 ,2 ,3 ,0 ,1 ,2 ,3 ,0 ,1 ,2 ,31~

I

{

I ; #endif@

5

Page 48: U niversidad Autónoma Metropolitana

Manual técnico Códigos f u e n t e s MOUSS4-O. C

#ifndef - Mouse4- #define - Mouse4-

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . version .9, 11/20/07 *

* by Richard Sadowsky 74017,16 * released to the public domain * * ADAPTACION PARA LENGIJAJZ C

por Alejandro Garcia Teroba. * * y Lázaro islas Saavedra. * 23/Marzo/1991 * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

* * Mouse4 - Text Mouse Unit

* *

#include <dos.h>

#define -CURPOS 1

#define -LEFTREL 4 #define -LEFTPRESS 2

#define RIGHTPRESS 8 #define RIGHTREL 16

union REGS Mouse-Reg; unsigned int Mouse-Error; unsigned char Mouse-present; unsigned char Mouse-Status; unsigned int Mouse-X, Mouse-Y; unsigned int MouseBoutom [41 = {0,13,32,27) ;

char Mouse-Installed (void);

int InitMouse (void) ; /* Funcion O - In i c i a l i za el ratón por softwere y hardwere */

void ShowMouse 0 ; /* Funcion 1 - Presenta el cursor del ratón */

void HideMouse 0 ; /* Funcion 2 - Oculta e l CUSOI del ratón

int MousePosition (int *MouseX, int *Mousey);

/* Funcion 3 - Regresa l a posicion del ratón y el estado de los botones, X e Y valores en l a ecacala de

80 columnas en modo texto */

void setmouseposition (int mousex, int mousey); /* Funcion 4 - Asigna una posición a l cursor, X e Y son

valores en l a escala de 80 en modo texto */ int mousepress (int button, int *count, int *lastx, int *lasty) ;

/* Funcion 5 - Bucca l a información de los botones, X e Y son valores en l a escala de 80 en modo texto */

int mouserelease (int button, int *count, int *lastx, int *lasty) ; /* Funcion 6 - Busca información relacionada con los boto-

nes, X e Y son valores en l a escala de 80 . para modo texto */

1

Page 49: U niversidad Autónoma Metropolitana

Manual técnico

L

Códigos fuentes MDUSE4-O. C

int mousexy (int xi, int yi, int x2, int y2); /* funcions 7 y 8 - Asigna los valores mfnimos y máximos

para el desplazamiento horizontal y . vertical, X e Y son valores en la es- cala de 80 para el modo texto *?

void RestoreMouseXY 0 ; /* funcions 7 y 8 - Restaura los valores mfnimos y máximos

para una pantalla CGA */

void SetPixeltoMickey(int Horiz, int Verti); /* funcion 15 - Asume la razon por pixel para el ratbn */

/******* IMPLEMENTACION DE LAS'RUTINAS *******/ int InitMouse 0

I MouseReg.x.ax = O ; int86 (0x33, &Mouse-Reg, &Mouse-Reg) ; return (Mouse-Reg.x.ax) ; 1

void ShowMouse 0 I

1

Mouse-Reg.x.ax = 1 ; int86 (0x33, &Mouse-Reg, &Mouse-Reg) ;

void HideMouse ( ) I

1

Mouse-Reg.x.ax = 2; int86 (0x33, &Mouse-Reg, &Mouse-Reg) ;

int MousePosition(int *MouseX, int *Mousey) 1 Mouse-Reg.x.ax = 3; int86 (0x33, &Mouse-Reg, &Mouse-Reg) ; *MouseX = ((int) (Mouse-Reg.x.cx/8) + 1) ; *Mousey = ((int) (Mouse-Reg.x.dx/8) + 1) ; return (Mouse-Reg.x.bx) ;

1

void setmouseposition(int mousex, int mousey) 1 Mouse-Reg.x.ax = 4; Mouse-Reg . x . cx = ( (int) mousex* 8) - 1 ; MouseReg.x.dx = ((int)mousey*8) -1; int86 (0x33, &Mouse - Reg, &Mouse-Reg) ;

1

2

Page 50: U niversidad Autónoma Metropolitana

Manual técnico Códigos fuentes

int mousepress (int button, int *count, int *lastx, int *lasty) { Mouse-Reg.x.ax = 5; Mouse Reg.x.bx = button; int86(0~33,&Mouse-Reg,&Mouse-Reg); *count = Mouse-Reg.x.bx; *lastx = ((int) Mouse-Reg.x.cx / 8) + 1; *lasty = ((int) Mouse-Reg.x.dx / 8) + 1; return (Mouse-Reg.x.ax) ;

I

int mouserelease(int button, int *count, int *lastx, int *lasty) { Mouse-Reg.x.ax = 6; Mouse Reg.x.bx = button; int86(0~33,&Mouse_Reg,&Mouse - Reg); *count = Mouse-Reg.x.bx; *lastx = ((int) Mouse-Reg.x.cx / 8) + 1; *lasty = ((int) Mouse-Reg.x.dx / 8) + 1; return (Mouse-Reg . x . ax) ;

1

void setmousexy (int x1,int y1,int x2,int y21 I Mouse-Reg.x.ax = 7 ; Mouse-Reg.x.cx = (int) (x1*8) -1; Mouse Reg.x.dx = (int) (x2*8) -1; int8670x33, &Mouse-Reg, &Mouse-Reg) ; Mouse-Reg.x.ax = 8; Mouse Reg.x.cx = (int) (yl*8) -1; Mouse-Reg.x.dx = (int) (y2*8) -1; int86(0~33,&Mouse-Reg,&Mouse-Reg);

1

void RestoreMouseXY (void) { MouseReg.x.ax = 7; Mouse-Reg.x.cx = O ; Mouse-Reg.x.dx = 639; int86 (0x33, &Mouse-Reg, &Mouse-Reg) ; Mouse Reg.x.ax = 8; Mouse1Reg.x.c~ = O ; Mouse Reg.x.dx = 199; int86(0x33, &Mouse-Reg, Mouse-Reg) ;

1

void SetPixeltoMickey(int Horiz, int Verti) I Mouse-Reg.x.ax = 15; Mouse-Reg.x.cx = Horiz; Mouse-Reg.x.dx = VeIti; int86(0~33,&Mouse-Reg,&Mouse-Reg);

1

3

Page 51: U niversidad Autónoma Metropolitana

Manual técnico MOUSIs4-O. C

char Mouse - installed (void) i Mouse-Error = InitMouse 0 ; if (Mouse-Error == (unsigned int) 65535)

Mouse-present = 1; {

1 else

I

I ; I #endif@

. - return (1);

- Mouse-present = O; return ( O ) ;

Códigos fuentes

4

Page 52: U niversidad Autónoma Metropolitana

Manual T4cnico conciuaionea.

Lonclusiones.

Al diseñar un paquete de gráficos, necesitamos considerar

no solo las operaciones de graficación que se efectuarán, sino

también la forma en que estas operaciones se pondrán a dispoci-

ción del usuario. Una interfaz debe diseñarse de manera tal que

proporcione un medio adecuado y efectivo para que el usuario

acceda fácilmente tanto las rutinas básicas, como el despliegue

de objetos, establesimiento de atributos o la realización de

transformaciones.

La unidad gráfica para le desarrollo de ,sistemas, fue

diseñada como una solución a problema de comunicación que existe

entre el usuario no experto y la computadora, los resultados

obtenidos al finalizar el proyecto si bien no completarón las

metas establecidas en un principio, si lograr6n establecer ese

vinculo con el usuario final proporsionando un ambiente de

trabajo agradable y mas amplio, que el usado con otra herra-

mienta no gráfica.

A lo largo del proyecto se fueron presentando varios proble-

mas entre los mas importantes fue el desconocimiento del tema y

las herramientas que se usarón, este problema fue resuelto sobre

la marcha estudiando y familiarizandose con el ambiente de

trabajo.

Finalmente podemos decir que la realizacibn del proyecto fue

una experiencia bastante educativa, en la cual se tuvo que hacer

una ardua invertigacih con respecto al uso optimizado de los

recursos con los cuales contabamos.

1 8

Page 53: U niversidad Autónoma Metropolitana

Manual técn ico

b

Bibliograf 5a

BIBLIOGR AFíA.

C MANUAL DE REFERENCIA Herbert Schidt.

Osbome/McGraw-Hill 1 "Edición 1989

TURBO PASCAL MANUAL DE REFERENCIA Herbert Schidt

Osbaome/McG raw-Hill

TURBO C REFERENCE GUIDE Borland International, Inc.

INTRODUCCIÓN AL MICRO-PROCESADOR 8086/8088 Christopher L. Morgan - Mitchell Waite

Byte books/Mc Graw-Hill l a Edición 1988

PCX PROGRAMMER'S TOOLKIT REFERENCE GUIDE PCX EFFECTS REFERENCE GUIDE

PCX TEXT REFERENCE GUIDE Genus microprogramming, Inc.

MS-DOS ADVANCED M icrosoft Corporati on.

GRAFICAS POR COMPUTADORA Donal HearnJM. Pauline Baker

USER MANUAL TURBO PROFETIONAL Turbo Power Software.

19