View
6
Download
0
Category
Preview:
Citation preview
#
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
Turbo Power SofhaPe.
UNIVERSIDAD AUTONOMA METROPOLITANA
Casa abierta al tiempo
LICENCIATURA EN COMPUTACION
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.
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
nanual Técnico Indi ce
Código fuente de las rutinas. 17
Conclusiones y análisis de resultados. 1 8
Bibliografía.
3
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.
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
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
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
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.
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
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
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
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:
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
-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.
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.
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
wanual TOcnico códigos fuentes.
CAPITULO 3 CODIGOS FUENTE .DE LAS RUTINAS.
I 17
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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 ;
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Recommended