Color).

Anuncio
FRDYECTQ TERMINAL
Sistema Simulador en Pantalla para el paso
de Parametros entre Procedimientos '
1
Asesor I Ornar Cuauhtemoc Maldonado Hernandez.
Ai-
I
i
;Tase Ruben R i a % Salazar.
I
MPtriculr t
84227029
I
I
Mexico D.F.
leog
En este t r a b a j o 5e u t i l i z o como h e v r r a m i e n t a p r i n c i p a l e l L e n g u a j e d e
P r o g r a m a r i o n C.La e f i c i e n c i a i n h e r t e d e C comparada con l a p o s i b i l i d a d de
f u n c i o n a r d i r e c t a m e n t e s o b r e l o s b i t s y l o s bytes d e l a memoria d e l a s comp u t a d o r a s p e r m i t e usar C e n l u g a r d e l ensamblador e n muchas s i t u a c i o n e s .
'I
Dado esta, el L e n g u a j e C p e r m i t e una i n t e r f a c e : usuPrio-mwquina,senrilla,'
f a c i l de contender y e f i c a z .
Dentro d e l a s r u t i n a s c r e a d a s en C se e n c u e n t r a n l a s s i g u i e n t e s :
-
-
R u t i n a s d e Menu.
R u t i n a s d e Ventanas.
R ~ i t i n a sd e F u n c i o n e s G r a f i c a s y Movimiento.
D e b i d o a que l a c t - e a c i o n d e e s t a s r u t i n a s r e q u i e r e un control d i r e c t o d e
l a p a n t ñ l l a , e s i m p o r t a n t e conocer l o s a d a p t a d o r e s d e video. E x i s t e n v a r i o s
t i p o s d i f e r e n t e s d e a d a p t a d o r e s de v i d e o d i s p o n i b l e s a c t u a l m e n t e pat-a l a s
F C ' s , l o s mas comunes son :
'i
-
L a T a r j e t a Monocroma.
La T a r j e t a CGA (Adaptador d e G r a f i c o s e n Color).
L a T a t - j e t a EGG (Adaptador- d e G r a f i c o s Avanzados).
La T a r j e t a VGA ( A r r a y G r a f i c o s d e V i d e o ) .
La PCjt-.
I
J u n t o s estos a d a p t a d o r e s s o p o r t a n v a r i o s modos d i f e r e n t e s d e f u n c i o n a
m i e n t a d e v i d e o . (Ver l a T a b l a s i g u i e n t e ) .
l
-
Camo se puede v e r , a l g u n o s modos son pat-a Texto y o t r o s p a r a G r a f i c o s . E n
modo T e x t o solo se puede m o s t r a r t e x t o . E n modo G r a f i c o , c ; e puede mostar tant o texto como aratfico(t5.
'
'
'
La pat-te mas pequena d e l a p a n t a l l a d i r e c c i o n a b l e p a r e l u s u a r i o e n modo
T e x t o es un g a r a C t e r . E n modo G r a f i c o , l a pat-te mas pequena d i r e c c i o n a b l e p o r
e l u s u a r i o es e l p i x e l .
En modo T e x t o , l a s p o s i c i o n e s i n d i v i d u a l e s d e l c a r a c t e t - e n l a p a n t a l l a se
r e f e r e n c i a n m e d i a n t e ntimet-os d e f i l a y ccilumnci+En modo G r a f i c o s , los p i e e l e f i
i n d i v i d u a l e s se re+et-encian m e d i a n t e sus c o o r d e n a d a s
y 1,siendo X e l eje
horizontal.
x
E n c u a l q u i e r a d e los
U05
t a l l a es l a p o s i c i o n (OSO).
modocj,la e s q u i n a s u p e r i o r i z q u i e r d a d e l a pan
'
2
h
-
TAELPI :
Mnwndbicur
de texto
0
i
2
Textu N / N
Texto 16 c o l o r e s
Texto E/N
Texto 16 c o l o r e s
Graficos 4 colares
Graficoc; 4 tonos g i s e s
Graficos 2 colores
Texto B/N
F'Cjv. Gt-aficos 16 c o l o r e s
PCjr G r a f i c o s i6 c o l o r e s
Gvaficos 4 c P i 0 r e s
Reservado
Reser va da
G r ñ f i c o s 16 c o l o r e s
Graficoc; 16 c o l o r e s
Gra+icus 2 c o l o r e s
G r a f i c o s 16 c o l o r e s
Graficos 2 colores
G r a f i c o s 16 c o l o r e s
G r a f i c o i s 256 c o l o r e s
,
7
.J
4
s
6
7
€3
9
10
11
12
13
14
15
16
17
18
19
Cuando estamos en e l modo T W ~ Ocalor,puede especificat- e l c o l a r en que
s e muetra e l texto.Los ColOt-es y sus enteros equivalentes s e muestran en l a
siguiente tabla :
color del texto
Sin colorAzcr 1
Verde
Ciñn
Rojo
Magenta
Marran
t r i s claro
Gris o ~ c u r o
\
V a l or
0
i
2
-r
3
4
!5
6
7
€3
Color del texto
Azul claro
Verde c l a r o
Cian c l a r o
Rojo c l a r o
Magenta c l a r o
Amari 1 l a
Blanco
3
Valor
9
io
11
12
13
14
15
l o s c o l o r e s de #ondo son p a r a e l modo
Color de fondo
'Ipwxto
son :
valor
Sin c o l o r
Azul
Ver de
Cian
Rojo
Magenta
Marron
I
Para l a s modas de dmArrOoO e n c o l o r , l o s c o l o r e s de +ondo son :
Color d+ faxdo
Val or
Color de fordo
Azul claro
Verde c l a r a
Cian c l a r a
Rojo ciar-o
Magenta c l a r o
Amari 1 l o
Blanco
S i n color
Azul
Verde
Cian
Rojo
Magenta
Marron
Gris claro
G r i s oscuro
l o s c o l o r e s de primer plano para e l modo
ORAFICOS
Valor
9
1o
11
12
i3
14
15
s e veran mas adelante.
Hay t r e s maneras de acceder a1 adaptador de video :
I
!
I
-
La primera e s a t r a v e s de llamadas a l DOS,que es demasiado lenta.
-
La segunda e s a t r a v e s de l a c r u t i n a s de l a ROM-EIOS,que e s ma5 rapida y puede set- suficientemente rapida en computadoras tomo e l AT
a l a Gama PS/2.
-
La tekcera manera es leyendo y e s c r i b i e n d o directamente en l a Memor i a RAM de video,que es muy rapida pero r e q u i e r e mas t r a b a j o par su
parte
I
Para l a s r u t i n a s creadas en e s t e t r a b a j o s e u t i l i z a l a segunda opcion,'el
acceso a la RUM-BIOS.
4
La5 l l a m a d a s son hechas a l a
ROM-BIOS usando i n t e r r u p c i o n e s de s o f t w a r e .
Una i n t e t - r u p c i a n es u n t i p o e s p e c i a l d e i n s t r u c c i o n que h a c e que se p a r e l a
ejecucion d e l programa a c t u a l g o r e g u a r d e e n l a p i l a el estadu a c t u a l d e l s i s
tema y entonces se s a l t e a una r u t i n a d e t r a t a m i e n t o d e l a ' i n t e r r u p c i o n , d e t e r m i n a d a p o r e l numero d e l a i n t e r r u p c l o n ; u n a v e z t e r m i n a d a l a r u t i n a d e
i n t e r r u p c i o n , s e l l e v a a c a b o una v u e l t a de i n t e r r u p c i o n , q u e h a c e que v u e l v a
a l a ejecucion d e l programa i n t e r r u m p i d o .
La ROM-BIOS tiene d i f e r e n t e s t i p o s de
pt-opositos :
Pnterrrrpeion
Ftoicioil
5h
1Qh
llh
E/S d e V i d e o
interrupciones
pava
las
distintos
U t i l i d a d d e imprimir p a n t a l l a
L i s t a d e Equipamianto
Tamano d e Memoria
E/S d e Disco
E/S F u e r t o S e r i e
Control de Cassette
E/S d e T e c l a d o
E l C d e Impresora
E j e c u t a e l BASIC d e ROM
E j e c u t a el Gat-gador d e Arranque
Hora y Fecha
12h
13h
14h
l5h
16h
17h
18h
19h
1Ah
L a s r u t i n a s c o n s t r u i d a s e n este t r a b a j o se h i c i e r o n b a j o el s i s t e m a oper a t i v o MS-DOS y un m i c r o p o c e s a d o r d e l a f a m i l i a 8086 (8086,8088,80186,80286
80386 y €30486).Aunque los p r o c c s a d o r e s 80286,80386 y 80386 t i e n e modos d e
o p e r a c i o n q u e sobr-epasan a l 80P36,todos e l l o s pueden emular a l 8086.
E l 8C)86 contiene 14 r e g i s t r o s e n los que se c o l o c a informacion
para
p r o c e s a d a o para c o n t r o l a r e l programa.Los r e g i s t r o s c a e n d e n t r o de
s i g u i e n t e s c a t e g o r i a c : ( t o d o s son de 16 B i t s o 2 B y t e s d e l o n g i t u d ) .
-
R e g i s t r a s de pt-oposito general.
AX : AH
BX : BH
C X : CH
DX : DH
-
-
AL
EL
CL
DL
se
las
-
R e g i s t r o s d e i n d i c e y d e p u n t e r o s base.
SF : P u n t e r a a P i l a .
EP : P u n t e r a a Ease.
S I : I n d i c e Fuente.
D I E I n d i c e Destina.
I
i
I
-
R e g i s t r a s d e segmento.
!
CS : Segmento d e Codiga.
DS : Segmenta d e Dato.
SS : Segmento d e F i l a .
ES : Segmenta E x t r a .
-
R e g i s t r o s de p r o p o s i t o e s p e c i a l ,
I
IF' : P u n t e r o a I n s t t - u c c i o n .
IR : R e g i s t r o d e I n d i c a c i o n e s .
I
I1
I
L a i n t e r r u p c i o n que usamos p a r a a c c e d e r a l a p a n t a l l a es l a i n t e r r u p c i o n
Ib(1C)H)r q u e es usada pat-a a c c e d e r
a l Vicieo.Ee;ta
i n t e t - r u p c i o n ~15a los
r e g i st r o s d e p r a p o s i t o g e n e r a l d e 1 m i c r o p o c e s a d o r E s t a i nter rupc ian est a
a s o c i a d a con un numero d e o p c i o n e s a l a s que se puede a c c e d e r
v a l o r d e l r e g i s t r o AH cuando 5e hace l a 1lamada.Si l a f c i n c i o n
v a l o t - , e s t e es g e n e r a l m e n t e d e v u e l t o e n AL.
mediante
devuelve
el
un
En l a s g u i e n t e t a b l a se muestra una l i s t a p a r c i a l d e a p c i o n e s d e l a i n terrcipcion Ib(lOH1 :
.
Registro AH
o
1
2
-F
.
,
i
4
5
6
7
!
I
8
9
AH
IiH
CH
DH
EH
FH
Funcion
F i j a r e l modo d e v i d e o
F i j a r l a l i n e a de1 c u r s o r
F i j a r l a G o s i c i o n d e l cLwc>or
L e e r l a p o s i r i o n d e l cursor
Leer l a pasicion del lapiz optico
F i j a r l a p a g i n a de v i d e o a c t i v a
Desplazat- l a p a g i n a h a c i a a r r i b a
Deeiplazav l a p a g i n a h a c i a a b a j o
Leet- e l c a r a c t e r e n l a p a s i c i o n d e l cursor
E s c r i b i r cat-actet- y a t r i b u t o en l a p c i s i c i o n d e l c u r ~ o r
E s c r i b i r c a r a c t e r en l a p o d c i o n a c t u a l d e l cursor
F i j a r l a p a l e t a de colares
E s c r i b i r un punto
Leer- u n p u n t o
E s c r i b i r u n c a r a c t e r an l a p a n t a l l a y a v a n z a r e l cursotLeer e1 estada del v i d e o
6
r
Y
P a r a acceder- a l a s i n t e r r u p c i o n e s d e l a ROM-BIOS e l l e n g u a j e C p r o p o r c i o n a una r u t i n a d e b i b l i o t e c a denominada intad#>,que se usa p a r a e j e c u t a r .
una i n t e r r u p c i o n s o f t w a r e .
La f u n c i o n int-3
I
I
'
p r e s e n t a l a s i g u i e n t e Forma g e n e r a l :
1
int int86tnurn,inrílg,outrílg>
int
union ltws
union RE-
(numero de i n t e r r u p c i o n )
(valor del
r e g i s t r o de
entrada)
( v a l o r d e l r e g i s t r o de s a l i d a )
num;
*inreg.;
*outrwgm;
1
E l v a l o r que d e v i i l v e l a Funcian int88C) =lei e l v a l a r del r e g i s t r o
t i p o REOS se encttntra e n e l íX3S.H de l a b i b l i o t e c a d e C.E1 t i p o REOS
l a s i g u i n t e Forma g e n e r a l :
mtruct NSOSPALADRA
1
€
unrignd int
AX.El
tiene
w,bx,cx,dx,f Lag;
>;
mtruct nIMcomvrsc
c
u w i g n d char
aL,ah,bL,bh,ct,ch,dL,dh;
>;
<
union
mtruct m r A L l B R A
x;
mtnict R E a l B m
h;
>;
Como se puede ver,st:Eas e5 una u n i o n d e d o s e s t r u c t u r a s . E l
uso d e
la
e s t r u c t u r a LU~GSPA~ADM l e p e r m i t e a c c e d e r a l o s r e g i s t r o s de l a CPU
como
r e g i s t r o s de 16 . b i t s , m i e n t r a s que R O Q P D Y T E , ~ ~da un a c c e s o a l o s
registros'
i n d i v i d u a l e s d e 8 b i t s . p o r e j e m p l o , p a r a a c c e d e r a l a f c i n c i o n 5 d e l a interr u p c i o n humera 16, u s t e d d e b e r i ñ usar l a s i g u i e n t e s e c u e n c i a d e c o d i g o :
union m
c
w
p
in,out;
in. h . a h = S;
int~S6,&in,&out>;
7
Dentro d e l a s r u t i n a s hechas p a r a l a c t - e a c i o n d e l Menu P r i n c i p a l d e Op
ciones ce t i e n e n l a s s i g u i e n t e s :
-
1) F ~ n ion
c
: rmnu-inatantawot>
V i s u a l i z a un menu y d e v u e l v e l a seleccion escogida.Dentr-o d e los p a r a
metros q u e se pasan a e s t a f u n c í c l n e s t a n :
-
-
L a 5 o p c i o n e s d e l menm.Estaij o p c i o n e s son caderiaij y l a forma mas
f a c i l p a r a paeiar una l i s t a de c a d e n a s a una F u n c i o n es p o n e r
l a s c a d e n a s en un A r r a y B i d i m e n s i o n a l y pasar- un p u n t e r o a ese
A t- ra y
Carno t a m b i e n l a seleccion puede ser o b t e n i d a p r e c i o n a n a d o l a
t e c l a d e l a l e t r a t o n que e m p i e z a l a o p c i o n , l o c nombres d e l a s
t e c l a s deben ser p a s a d a s tambien.Esto se hace pot- medio d e una
cadena que c o n t e n g a t o d o s 10% c a r a c t e r e s d e l a s t e c l a s c l a v e s .
E l numero d e o p c i o n e s d e l menu.
La c o o r d e n a d a s d e donde p r i n c i p i a e l Menu. (Esquina s u p e r i u r i 2 quierda).
Una bandera p a r a c o l o c a r un Borde a l r e d e d o r d e l Menu.
.
La F u n c i o n menu-inrtantanooo
-
-
d e b e dl? h a c e r l o s i g u i e n t e :
Salvar- l a p a r t e d e la p a n t a l l a usada pot- el menu.
V i s u a l i z a r el B a r d e 51 es r e q u e r i d o .
V i s u a l i z a t - e l Menu.
h c e p t a r l a Respuesta d e l ~ieiuario.
R e s t a u r a r l a P a n t a l l a a su c o n d i c i o n o r i g i n a l .
F i j a l a p o s i c i o n d e l c u r s o r . E s t a f u n c i o n usa l a i n t e r r u p c i o n I 6 , f u n c i a n
2 , c o n l a coor-denada d e l a columna e n aL y l a c o o o r d e n a d a d e l a f i l a e n
W , l a p a g i n a d e v i d e o es e s p e c i f i c a d a e n BH.
E l c o d i g o e n C se muestra a c o n t i n u a c i o n :
Void vete- xy(x,y>
int
x,y
C
union BE-
r. h . a h
=
r;
2;
r. h. ¿
=i
y;
r. h.dh = x;
r. h. bh
= O;
inUb(O*Lo&r,kr>;
8
S a l v a una porcion d e l a p a n t a l l a . L a i n t e r r u p c i o n 1 6 , f u n c i o n 8 , d e v u e l v e
e l caracttot- e n l a posicion d e l cürsor e n AL y su a t r i b u t o e n AH,la f u n cion lee una p o r c i o n do, l a p a n t a l l a g s a l v a l a i n f o r m a c i a n e n un P u f f e r y
l i m p i a d i c h a porcion d e p a n t a l l a .
,
,
( 4 ) F ~ i n c i o n: rumttciuua-vi&o<)
R e s t a u r a una g o r c i o n d e l a pantalla.Una v e z que l a s e l e c c i o n d e l menu
ha s i d o hecha,la r e s t a u r a c i w n c o n s i s t e simplemente e n e s c r i b i r e n l a
Memoria RAM d e v i d e o l o que se almaceno p r e v i a m e n t e . P a r a hacer esto se
u t i l i z a l a i n t e r r u p c i o n 16,funcion 9, l a c u a l r e q u i e r e q u e el c a r a c t e r
este e n U , s u atri'bcito en f
L,l a p a g i n a de video e n BH y e l numero de
veces p a r a e s c r i b i r e l c a r a c t e r e n CX ( e n este c a s o una v e z ) .
V i s u a l i z a el Menu e n (su p o s i c i o n . 6 e s t a Funcion se l e pasa un puntero a
un CIrray d e c a d e n a s q u e son l a 5 que se v i s u a l i z a r a n , l a s CoQrdcnadas X 9 Y
desde donde comenzaran a v i s u a l i z a r s e y e l n u m e r o d e opciones d e l Menu.
L a manera mas C a c i l par-a c r e a r e l Array B i d i m e n s i a n a l que c o n t e n g a
la5
cadenas de sirleccon del M e n u es c r e a r v a r i a b l e s usando l a s i g u i e n t e f o r
ma general :
char
*<Nombre c k L -nu>
"Primara opclon",
*'Segun& opcion",
"N-erima
C
I
=
€
opcion",
>;
e s t a d e c l ñ t - a c i o n h a c e que automñticamente e l c o m p i l a d o r
de C c o l o q u e
l a s c a d e n a s e n su t a b l a c o r r e s p a n d i e n t e en t i e m p a d e e j c c u c i o n . L a v a r i a
b l e , p o r l a t a n t o , a p u n t a a1 primer c a r a c t e r d e l a p r i m e r a cadena e n l a
Tabla.
(6) Funcion :
dibujarborde<>
S i es r e q u e r i d o e l E a r d e , e s t a r u t i n a p u e d e ser usada pat-a poner un bord e a l r e d e d o r d e l Menu,dandale l a s c o o r d e n a d a s d e
l a e s q u i n a superior
i z q u i e t - d a y l a e s q u i n a i n f e r i a r derecha.
a
Func i on :
obtienr- reap<>
O b t i e n e l a ~ j e l e c c i o nd e l usuario.El ucjuat-io puede e l e g i r una o p c i o n d e l
Menu d e una de l a s d o s .formas s i q c i i e n t e s :
-
L a p r i m e r a m e d i a n t e l a s FLECHFIS, d e a r t - i b a y a b a j o , q u e se usan p a r a
d e s p l a z a r l a ilumunacian s o b r e l a o p c i o n deseada
y
despues pulsar
RETURN.
La segunda manera d e s e l e c c i o n a r una o p ~ i o n ~ e
p rse c i o n a n d o su t e c l a
c 1a v e a s o c i ada.
Cuando l a F u n c i o n comienza a e j e c u t a r s e , l a p r i m e r a o p c i o n d e l Menu es
s o b r e - i lumunada. E n t o n c é s l a r u t i n a e n t r a a un b u c l e q u e e s p e r a una resp u e s t a d e l u s u a r i a . S e usa l a f u n c i o n biosJceyC3 que e s p e r a hasta q u e l a
t e c l a es precio nada,^ e n t o n c e s lee l a t e c l a . L a F u n c i o n bioskeyC3 es esp e c i f i c a d e l Turbo C . S e usa bieskeyC> ya que l a r u t i n a debe p o d e r l e e r
los 16 b i t s d e l c o d i g o g e n e r a d o cuando se p u l s a una t e c l a .
Func i on :
~mcribo-vidoo~>
V i s l i a l i z a una cadena c o n a t r i b u t o s e s p e c i f i c a d o s .
E s usada por obtiene-rem#> p a r a e s c r i b i r una cadena a l a Memoria
de
v i d e o e n - l a p o s i c i o n i n d i c a d a p o r X,Y usando e l a t r i b u t o e s p e c i f i c a d o ;
es usada p a r a v i s u a l i z a r l a o p c i o n d e l Menu e n v i d e o i n v e r s o si e s t a
s o b r e - i l u m i n a d a o e n v i d e o normal si no e s t a sabre-iluminada.
R e t o r n a l a p o c j i c i o n d e l a t e c l a c l a v e e n l a cadena.Si
s i a n a una t e c l a que no e5 c l a v e e s t a r e t o r n a r a O.
e l usctario p r e
-
La F u n c i o n mrnu_inrtanta~ot> comprueba t o d a s las l o c a c j o n e s f u e r a
de
r a n g o y un Menu sobre-*dimensionado,devolviendo un v a l o r d e -2 si una d e est a s s i t u a c i o n e s e x i s t e . C u a n d o e l u s u a r i a s o l i c i t a ' c a n c e l a r e l Menu'
de vuelve e l v a l o t - -1 d e b i d o a que l a Funcion obtiwto-reapc) d e v u e l v e un
-1
cuando e l u s u a r i o p u l s a l a t e c l a ESC.
La F u n c i o n nnnu-¿nmtuntanoo<>usa l a s r u t i n a s d e a s i g n a c i o n dinamica
C para almacenar temporalmente l a i n f o r m a c i o n d e l a p a n t a l l a .
del
Una Ventana es una p o r c i o n d e l a p a n t a l l a que se usa como u n o b j e t i v o
e s p e c i f i c o . C u a n d o a p a r e c e l a V e n t a n a s a q u e l l o que esta e n ese momenta e n l a
p a n t a l l a &e guarda y se muestra l a nueva Ventana.Cuando l a a p l i c a c i o n q u e
usa l a Ventana ha acabad0,desapñrece l a Ventana y vuelve a a p a r e c e r e l
contenida o r i g i n a l de l a p a n t a l l a .
P a r a implementar l a s Ventanas c o r r e c t a m e n t e , se n e c e s i t a que t o d a s
las
F i i n c i o n e s d e Ventanas d i s p o n g a n d e t o d o s los a t r i b u t o s n e c e s a r i o s p a r a 5u
s i s t e m a d e r e q e r e n c i a e n t o d o momento.Para c o n s e g u i r esto,se u t i l i z a r a e l
c o n c e p t o de e s t r u c t u t - a s s i m i l a r a l usado e n 135 r u t i n a s d e Menus.La e s t r u c
t u r d d e l a Ventana e5 d e l a menera s i g u i e n t e :
-a
rtruct b-0ventana €
comionaw,f inx,comieruay ,f i n y ;
int
int
curx,cury;
unmigned char *p;
char
*qabecora;
int
borde;
int
activa;
bumWAX- PASE];
Las v a r i a b l e s co~errPax,finx,comUnncry$iny,gClaTdan l a 5
coordenadas
de
l a 5 e s q u i n a s s u p e r i o r d e r e c h a e inferior i z q u j e r d a de l a ventana.
Las v a r i a b l e s curx,cu+y, guardan l a s c o o r d e n a d a s a c t u a l e s d e l
cc~rsor e n
l a Ventana.
La v a r i a b l e *p,apunta a l a r e g i o n d e memoria que guarda a q u e l l o que
h a b i a a n t e r i o r m e n t e en l a zona d e la p a n t a l l a que ocupa l a Ventana.
La v a r i a b l e *ocubece,ra,indica e 1 texto d e i a Ventana.
La v a r i a b l e borde,St? u t i l i z a p a r a i n d i c a r
si
l a ventana t e n d r a un
borde a l rededar.
La v a r i a b l e activa,valdra 1 si
l a Ventana e s t a e n ese momento
en
pantalla,^ O en caso c o n t r a r i o .
Dentro d e l a 5 t - u t i n a s c r e a d a s p a r a l a s Ventanas tenemos l a s s i g u i n t e s :
( 1 ) F u n c i o n : urear-vmntcmao
C o n s t r u y e l a 'ba5e d e l a ventana.Devuelve 1 si se puede constt-uir;en caso c o n t r a r i o d e v u e l v e O.& l a F u n t i o n se l e n e c e s i t a pasat- e l numer-o d e
l a Ventana de l a que sk desea crear l a e s t r u c t u r a .
A c t i v a una Ventana e n p a n t a l 1 a . A p a r e c e
l a ventana en l a p a n t a l l a .
Se usa p a r a mostrar- e l mensaje d e c a b e c e r a c e n t r a d o e n l a p a r t e s u p e
riot- d e l a Ventana.Si e l mensaje no c u d i e r a , n o aparf?cerie.+
-
$
( 4 ) F u n c i o n : &activa(>
D e s a c t i v a una v e n t a n a y l a b o r r a d e l a p a n t a l l a . L a F u n c i o n d e v u e l v e e l
c ~ t r s o ra l a p o e i i c i o n ( 0 , O ) . S i n embargoct,sepueden e n c o n t r a r alguna s l t u a
cion e n donde n o se d e s e e i n i c i a r l a p o s i c i o n d e l cursor.
(5) F u n c i o n :
,
vontanqxy~
L a s r u t i n a s d e E/S deben mantener manualmente e 1 cursot-,debe habet- una
forma d e p o d e r p o n e r e l c u r s a r e n e l lugar- donde se supone q u e debe d e
e s t a r , e s t a F u n c i o n hace j u s t a m e n t e e s o . S i t u a e l cursor e n una p o s i c i o n
d e t e r m i n a d a dc! l a v e n t a n a . D e v u e l v e O si se s a l e d e l t-ango;en casa
c u n t r - a r i o ctn v a l m - d i s t i n t o d e cero,
En l a s Ventanas n o se puede usar getchec3,ya que e s t a p e r m i t i r i a e l sal i r s e d e l a Ventana.Par e l l a se ha d e s a r r o l l a d o una F u n c i o n a l t e r n a t i v a
E s t a F u n c i o n lee un c a r a c t e r d e s d e la a c t u a l p o s i c i o n d e l c~ir'cjore n l a
v e n t a n a dada.Devuelve e l c o d i g o de b a r r i d o c o m p l e t o , e s d e c i r , t e n d r a acceso a l c o d i g o de 8 b i t s b a j o s y a l t o s .
7
Func i on :
vontana- Leoto
Se e n c a r g a d e leer un t e x t o d e n t r o
{ 81
I
I
Fct nc i o n :
de l a Ventana.
vontana- Wríb-o
E s c r i b e un c a r a c t e r e n l a p o s i c i o n donde se h a l l e e l cursor e n l a Vant ana e s p e c i + i c a d a .
Para e s c r i b i r u n c a t - a c t e r d e n t r o de una Ventana hay que comprqbar s i l a
Ventana e s t a a c t i v a y si e l c a r a c t e r - se s a l e d e los limites d e l a V e n tana.Despues d e e s c r i b i r e l c a r a c t e r , debe h a c e r a v a n z a r l a p o s i c i o n d e l
c~irsot-~
I
12
( 91
Func ion :
vamtana- emcrib&<>
*
E s c r i b e un t e s t a dado en l a Ventana que s e indique,se apoya en l a
c i o n vontcrncr_orcrili»car~de manera r e p e t i t i v a .
Funcion :
movwrnaro
y movor-mone.~
Se encrgan d e mover l a Ventana una posicion ya se! a
hacia l a derecha segun 5e necesite.
Func ion :
Fun-
la
izquierda
o
dibujqbor&vord>
Se encarga de e s c r i b i r - u n borde en l a ventand.si l a Funcion regresa un
v a l o r O no 512 a c t i v a e l bar-de,de lo c o n t r a r i o se a c t i v a e l borde.
Funcio n :
guc~aa_~idroo
Se encarga de guardar l a p w t e de l a p a n t a l l a que e s t a en itso antes de
a c t i v a r una Ventana.
Fu nc i an :
r o r t u r qvickoo
Se encarga de r e s t a u r a r l a p a n t a l l a que estaba antes d e
una Ventana.'
Funcion :
ser
activada
borpcrno
Borra l a p a n t a l l a actual en uso.
Funcion :
mo80-vickoo
Se encarga de devolver e l modo de video en aperacion,
&rites de que c u a l q u i e r funcion g r a f i c a sea usada9l a computadora debe
estar- en e l mada dt; video apropiadogen l a rnayoria de l a s computadores es
s e l e c c i o n a r e l modo y l a p a l e t a apropiados.
E n e l modo g r a f i c a en c o l o r , e l c o l o r de primer
13
4
plana
esta
determinado
t a n t o p o r e l v a l o r d e l color- como d e l a p a l e t a s e l e c c i o n a d a actualmente.
E x i s t e n v a r i o s modos d e v i d e a d i f e r e n t e s ( y a v i s t o s a n t e r i o r m e n t e ) ,en l a s
r ~ r t i n a sc r e a d a s se u t i l i z a e l moda d e p a n t a l l a 4 (se puede u t i l i z a r o t r o
modo dependiendo d e l a d a p t a d o r existente).
Parta e s t a b l e c e r e l moda d e v i d e o se u t i l i z a l a s i g u i e n t e Rutina :
void mo;do<int codigo- modo)
C
unicm l t O a r r;
r. h. al
r. h . a h
*
codigo-mode;
=
O;
intOb<O*iO,&r,&r);
>
En e l moda g r a f i c o 4 hay d i s p o n i b l e das p a l e t a s . l a
c u a t r o c a l o r e s que muestra :
V a 1or
Color en la pdeata O
Co~orcsn ia paleta í
C o l o r d e Fondo
A m a r i 1 1a
Color d e Fundo
Roja
Ver d e
Azul
Purpura
Blanco
l a Funcian pdetao que se m u e s t r a , s e l e c c i o n a l a
e n CLI argumenta :
void puhtalint pnum)
c
union la08 r;
r. h . b h = i
= pnum;
r . h . a h = U;
int86(a*&o,&r.&r>;
r . h. bL
1
I
>
p a l e t a determina la5
paleta
que
se
especit-ira
-
P a r a e n t r a r a1 programa a n t e s e s p e c i f i c a d o , se manda l l a m a r
d e t r a b a j o fum=iosi e l c u a l da e l a r r a n q u e d e l programa.
-
En l a p a n t a l l a a p a r e c e r a e l menu p r i n c i p a l , en e l c u a l
opciones :
-!
al
aparecen
at-chivo
cuatro
a ) E x p l i c a c i o n d e 10 que es una f u n c i o n en g e n e r a l .
b) E x p l i c a c i o n de l a llamada d e una funcion p ~ valor.
r
c) E x p l i c a c i o n d e una llamada d e f u n c i b n p o r referencia.
d) S a l i d a d e l programa.
-
Pat-a e n t r a r a cada una d e l a s o p c i o n e s se pueden h a c e r d e do5 formas;, l a
p r i m e r a es c o l o c a n d o l a s o b r e - i l u m i n a c i o n e n l a a p c i o n deseada y o p r i m i r
l a t e c l a RETURN
l a segunda o p c i o n es opt-imiendo l a t e c l a c l a v e . S i e n d a
p a r a l a o p c i o n a l a t e c l a F; p a r a l a b l a t e c l a V I p a r a l a c l a t e c l a R
y para l a d l a t e c l a S.
io
117
/ t WHliza la explicwion de un funrim y el pup de gsrretrm t/
#include 'stdi0.h'
#include 'm6.h'
' #include 'std1ib.h'
void salva-videoO;
void mtwn_videoO;
void pd-driverO;
wid vete-xyí);
mid borpan0;
void clsíi;
: void escribe-videdi;
void visualiza-nenuO;
void dibuja_boildeO;
void vmtay0;
void guarda-vihO;
void dikrja-imrilVeaO;
wid rmstra-c¿in!cwiO;
: void ñcribe-carO;
mid ewibe-tentoO;
void iwer_rasO;
I
wid rnr#_wipsO;
wid restaural);
int obtim-rñpO;
char tapCiontl= f *
'
Winicion de UM Fitmion
Lllrpda pw Valor
L l @ a por Reñremia
air
stnnt hsavrmtana f
int c
miwax,cmientay,finx,finy;
int curx,cury;
uneignmd c4ar tp;
char kabkara;
int bw6;
int activa;
1ba5eClwX_i#sEl;
iiin0
f
int
el#;
',
'', I;
8f
WSjnail::
PIE = ~ ~ n u - i r i s t ~ t ~ t ~ "
p&
cs
i a"
n
,~
, ,IO,Z,BORDEI;
cls0;
if !der :. O :i elec : 41
printf í"! ' ! ! WAOñ no existe apcion
1while íelec { O I I elec 1 4 ) ;
\nY;
switch lelec)
{
case O :
definition-funcioní 1;
break;
case 1:
iiaada-vaiw í i
;
break;
case 2 :
ilaiade-referencia í1;
break;
tase 3 :
exit (0);
I
1while (elec != 3);
ft Se calculan las dimsiones y se estirien errores rle diwision U
len = o;
'
fw(ie0; i<contadw; it+)
It Este ciclo selacim l a cadpM del aenu ms grande t/
iflstrlantamii3) ) len)
/t y se lo asiw a l a variable 'fen*.
t/
len = strlrnímtil);
finy = Im + 2 + y;
finx = contadw t 1t x;
ififfinx+l > 21) f f ífinpl > A))
printf í'EMR !!! : El mu no clbe esta f w a de rimp");
l
'
I
rptian 1-21;
/ t Restaurar !a pantalla original
I
,
tí
rñtaura_vidwIx,finxtl,y,fi~l,(char tip);
freeípi:
'
1
return íeleccioni;
/ t W "CION : visualiza-aenuil
Visualiza e2 mu en su picion ai@a de C/U
void visializa_rent(inu,x,y,cOnt&)
char tranitl;
int x,y,cmt&;
{
register int i ;
##/
It Cobre ilumina la priwra selarion t/
vete-xy ix,y) ;
escribe_videPln,y,anit0l,YII)_lMI);
fwl;;)
{
whileí!bipslrey(l)i;
c.i = biOdreyl0);
i t fjpwa hasta qup 59 puis ur# tecla tI
/t be l a terla t/
if(c.chl01)
/t Es una tecfa mrsal U
I
i t Verifica si K t e l a clave t/
tala-elepidil = esta-dtairs,tolarwlc.ch[Ol));
if itKl@ljida)
retwnitetla-elegitb-1);
It ~ s i e s e f m R o 8 # I w I E % Ct/~
witchL.chlOl)
{
I
1
else
{
case 'k':
return iflaha);
cm" :
return IflaWl;
casea :
return-1 ;
it
Es tecla #poria1
t/
~itchíc.chtll)
{
casen:
flKhs;
break;
cale80:
f l a w
k&;
I
iflflaha = cwrtador)
flecha = 0;
ififlcchr ,101
f l a h = contador 1;
-
WILN : escribe-video0
.
.
.
.
.
..
. .
/ t Visualiza
mid ~ribe-vi~íx,y,p,atribi
int x,y;
achr 4;
int atrib;
UM
cadena c m atrikitrñ especificados tI
(
unim RE66 r;
register i d i,j;
foríiy; tp; i++i
1
{
i
1
1
/t#tt
,
;
wte_xvíx, i 1;
r,h.ah = P;
It
r.h.bh = O;
/I
It
r*x.tx = i;
r.kal = ta+ti It
r.h.61 = atrib; It
intBbíOX10,k,ki;
Funtion escribir crtVtw tI
Mina activa es la cero
tí
&mu# de vaes que escribe un UTrtW
b
a
c
k tí
kriiiiito t /
tí
iüiCIQI : salva-vidW0
Lee une porcim de la platalla,miva Ia infwrion en un
y limpia di& mim de k pultalla.
iufk
fw(i=cmianay; i<finy; itti
c
fwíj.roimzax; j<finx; jtti
vete-xyíj, i i;
r.h.ih = 9;
r.h.bh = O;
r m x = 1;
. . *
it Fitncimtxcribeuncaracter I/
It Wurro de pagina activada tí
It l i m o de veres que se esribe el carvter tí
. . . _ _ .*,.
,
A,
a#&/
void cls0
‘I
union RE66 r;
r.h.ah = 6;
r.h.al = O;
r.h.ch = Q
r . k l = O;
r.h.dh = 24;
r.h.dl = 79;
r,h.bh = 7;
1
I
intsbiOxlO,h,b);
/t
/t
It
/t
/t
/I
It
sty1de pantalla t /
codig de ligia la pntaila tí
cpdip 8
Fila de cmionlo t/
Coiiuip
de raimo t/
fila final tí
Colure find :/
Linea en blanco t /
/tSt:t NlcIM : Vete-xyo
Dii el valw dc cada picion de ia pantalla a ser leido
o emito.
t#t/
I void vete-xy(x,y)
9
int x,y;
f
union lEi3 r;
t
’
1
,
’
r.hah = 2;
/t Fwcion de direcciomhto &I wsw t/
r.hbdl = y;
i t cpwhiub 8 la arluna tí
r,h.dh = x;
/ t b & m & de la fila t/
r.hh = O;
/t Rqini th video activa tí
int86(0xlO,b,bf;
/t#t
NEIM : &a-mO
int esta-enis,c)
lEatOrn0 ia picion de la tecla clave on la culeiu,fi el m w i o
@rim una *la quo m ICMla Cvritm ntotiura el valw O t t W
char b,c;
{
register int i;
1
fwíiio; ty it4
ifítsr+aq)
return(it1i
;
return (O);
1
It comtruccim de la hase #/
hseínri.cmienzax = cmi-enzax;
baseínu1.cmiway = cmienzay;
Wnii1,finx = finx;
basalnirl.finy = finy;
b a d n u 1 . p = p;
bssetml.cabPcwa = tabacera;
k I n U 3 . b w d e = bwQ;
baeiml.activa = O;
basetnur1.curx = o;
bawtm1,cury = 0;
return 1;
void ventataim)
int nu;
{
int x,y,rrhn,slar;
void qvw-ms(m)
int nu;
(
char car;
int coiienzax,EwPmay,finx,Ciny;
activa la ventana si
if I!biiwtmml.Ktiva)
ít
v#rtaMtm);
K
+io
tí
coriemay = cmieniay + 1 ;
finy = finy t 1:
1
W i v a im);
ba$etnurl.caiemax
= caimex;
basetnul.coriemay = Cirieiitay;
baseIntml.finx = finx;
baselnr1,finy = finy;
I void aver-ianopinr)
, int nru;
{
chr car;
int cPnenzax,cmienzay,f inx, finy;
/t activa l a uwitaw si es mcdwio tl
ifí!baselnrl.wtiva)
venw~nu);
toaimax = basetnul.cwimnax;
caiway = haik1,tminuay;
finx :basptnul.finx;
finy = Mnul.finy;
i cmiway = caienzay - i;
finy = finy - 1 ;
mid restwaaínw)
int nru;
{
register int i, j;
char far tv,W #;
char Uufgtr;
1
I
baseinail.activa = O;
void bwpan0
{
union REls r;
r.h.ah = b;
r.h.al = O;
r.hch = O;
l
1
r.h.cl = O;
r.h.áh t 24;
r.h.dl = 79;
r.h.bh = 7;
intsbNxlO,&r,&i ;
vwitani_ascribet(mm, str 1
'int nu;
ichar tstr;
't
/ t se v
a que l a vent& ñte activa t/
if I!brso[liirl.xtiva)
return O;
i
1
for(; tstr; stw)
wntan-mcribew ímm, t&r1 ;
return 1;
ventim_wcribecarfm,cari
int nw;
c
k car;
{
repister int x,y;
char far tr;
\
wid dibujr-bordwmlnrr)
int nir;
1
repister int i;
char far tv,far 8t;
wid iirsstra-cabeceraimi
int ~ u r ;
repisier int y,lon;
*
void ecrik-car (x, y, car, atr ib)
int ;y,#
char car;
int atrib;
{
register int i;
char far tv;
v = m-vi*,
v t= ixtlbo) t yQ
tvtt = car;
1
tv = atrib;
void escribe-textoix,y,p,atrib)
int x,y;
char tp;
l i n t
atrib;
{
register int i;
Chiif far tv;
union RE6S r;
:
r.h.ah = IS;
return int8bíOxlO,&,&) & 255;
/#&
Funcionas para l a Minirim de una k i a n
tats/
definicim-kimí 1
r
defini-1 O ;
waílje0;
desini-2 O ;
muje0;
Mini-30;
rnsrjeo;
M i n i 40 ;
iensijeO;
&fim-50;
mje0;
Mini-4 íi
;
1
wisaje0;
Mini-2 O
I
cakwa-dtfi i
;
dihtlo,tlemO;
ventm-tscribh(1,'
La Minirion de una Fmion coasiste en rlos partes :\VI;
vmtm-mibet tí,'
\n'i);
ventana-escribetil,'
11 ün enci$ezriento.\n"i;
wntana,ñcr ibet (1,'
2) iki cwrpo.\n'i;
ventana-esribet í1, '
\nV;
-
defi9l-Sli
{
cabecgra-def 0;
dikijn-def30 ;
ventana-exribetíl,'
ventam-escribelfl,"
ventana-exribettll'
ventana-esctibetíl,'
ventana-exribetíí,'
kana-escribetíl,'
ventana-exribetíl,'
*I
- El : especificadw_de,tipo,especificael tipo de valor que la fun -\ne);
cion devolvera.\n");
- El valor puede sw de cualquier tipo valida% no se eq#tiflca un \nY;
vaIar,entms la m a d u r a aswe por default que la h i o n de -\n');
volvera un rewltado entwo.\n');
- El : mrbre_de_fuKion,eqecificacon que &e sera If& la \nV;
funrion,El nmbre dekr dar una idea de io que realiza la Ftmion.\n');
Mini-40
c
cabecera-ffo;
dihijo_drBii ;
vñrtana_esuibatíl,' - La :lista-&pmtrai,es w licit& n&&j de variables sepa-\n');
MIS r e c f h los valars & hK arplvoRtos \nV;
ventana-eanibetfl,'
rrdsr, por
vwAiina-escriMí1,'
ttlindo se 11- la Fttncim\n');
ventana-ewibOt(1,' - Se
toaw el cm que la fuKiDn no incluya lista Be par&m\n');
ventaru-mcribet(1,' paro sera nmserio pie se coiugm IOQ parmtrris.\n');
utilizan para Winir el tipo de\n');
wntana-estribdfl,' las: &claraciom-át~Usz;ros,se
ventana-esribetíl,' Iw para&as en la lista.% Ia Fitrrion m tiem puiliatr~nose h');
ventana-esriWí1,'
masita la k l n r i o n de paruetros.\n');
vmtana-atribail,' - Si no esta el tipo de l a declaracion,el parlrptm se considera entero.\n');
e
-
.
1
ventanaí3);
ventana t 4! f
ventana-exribet (2," \no);
ventana-mribet í2,'
\no);
wntana-escribetí2,' finrial í i;\n");
ventana-exribetí2,'
\no);
wntana-exribetí2,' Funcim2 4 i;W;
ventana-escribet (2,
\nul;
cr~r-ventanai2," Figura 1 ',11,3,2i,qeomE);
crear-ventana13,' Figura 2 ',11,39,21,66,8IR8E);
&ana (2)
~~
yomm13::
3
I
ventana-exr ibet (2, ' 1inea í w )\nn1;
ventana-escribetí2," int nui\nYi;
wntana-escribet(2," {\n*l;
ventana-escribetí2," int i;\n");
ventana-escribet 12, o
\nu);
ventana-exribetí2,'
fUrli=l; i<=nu; i*)\n"I;
ventana-exribet (2,'
printf i't' 1; \n');
ventana-escribetí&' 1\n");
ventana-exrihet (3,' suacuadradcs(d\n');
ventana-exribet (3," int n;\n'l;
ventana-escribet(3,' l\n');
ventam-escribet13,'
int i,nri.O;\nl);
ventana-exr i bet 13, ' \no);
ventana_exribetl3, " forli=f; i<=n; i*)\n');
ventana-exribet(3,'
5u)o += i$i;\n*i;
ventana-exribet(3," return inu);\n');
ventana-escribetí3,' l\n'i;
Funcionñ para la definicion de llpWaa por Valor
lttiit
v_iidaii1iI
\
O
int i, reloj!, reloj2;
tW/
I
~-
-
~
1
1
ventana(6);
reloj2 = reloj2
t
1;
mr-aem(6);
crear-ventana (6,*<-',8,4&, 9, SIñ,R=
.S
reloj1 = reloj1 + 1;
1while (reloj1 (= 10);
crear-ventana (6,Y-",8,%,9 ,31 ,wO-NRK);
;
WritanaM;
1
msaje0;
valor-li)
r
(abetera-vail O;
ventana_eirribnttl," Consiste en lo siquiente :\n');
ventana-esmiktíl,' ;).R\
vw8spu_aocribetíl,'
La Funciom se invpran al mribir olll W
e y una lista adecua-\n');
vmtm,ñnibetll,'
da de aqmnt~sentre pamnWis,\n');
vert€uu-escriaattI,'
Se euolua utdi
y k e una copia de su valar en el pa+');
ventana_axri8et(l,'
r&
cor
&e a la Furich,\n');
vmtani_exribatíl,'
El valor que se le mipne a cada parvdro da la k i p n se utiii-\n');
ventm-emibetll,"
zara de cwia ioca1.k &a mera si una variable pas;i i
l
una Fm\n');
ventm-Kcribetíl,'
cion el valor aiaaceNulo de #jl vorimble M cambiara en el &o \nY;
ventana-escribetíl,''
que 10 llaia.\R.);
-
-
=
-
vmtirna_rcribetíl,' \n'i;
1
ventaaa-exr'ibetíl,p
veaios un ejwlo : \n');
valor-2 íi
{
CabeRra-vaiZO;
dibujo-val O;
vmtj#_cnriW~l,'En el Siquimte ejaglo,el
p~glrwa
principal umk 11a la Funcion\n');
ventana_psuiWíl,' ' cari8iar '.\n'i;
ventana-emisetll,' Se Is pwi cm pilryptro el valor que tiene la variable 'a',\n');
vPntm-acrikt41,' La variable 'cy de h FuKiwI tendra el valor 4 de la varirbie 'a'.\if);
,
ventana-aribet 14 ' h.1;
1
venta-mribeti4,' a = 4;\n'f;
wntana-mi~ribet(4,' b = X;\n');
ventana-1xcribetí4,' t = 41\na);
valar-30
{
cab#era-va120 ;
dibujo-val I);
r
i
1
wntana-escribetll,n Ya evaluada l a Fumion esta regresa un valor de 37,el cual swa\n");
wntana_exribetíl,8 asignado a l a variable 'b' del programa principal.\n");
ventana-e~ribetí4,~WI;
ventana-escribetí4," a = 4;in"i;
ventana-exribet(4,' b = 37;\n');
wntana-escribet14,' t = 4;\n");
/#ltt
Fumiom para la áefinicion de llauda por Rekrencia
1luada~referenciaí
{
int i,nlojl, reloj&
ttttl/
reIoj1 = relojl + 1;
I while (reloj1 (= 10);
crear-ventana (6, '-Y"' lo,&, 11,51 No_BoRDE) ;
ventanaífd;
mmajeí 1;
,
refwencia-20
{
1
Cabwxa-refZ (1;
dibujo-ref0 ;
ventana-ewiktil,' En el siguiente ejaslo el Proprrra principal W llvpr a la Funcion\n');
ventana-ecritietíi,' 'atha '.La cual ordm drs w ~ 9 5
\n9;
ventana-exribetíl,' Se le pas c m paraietro el valw qur tiene la dimcian 8 awia,de\n'i;
ventana-!xcribt(í,' las variables 'i'y 'j',( Ib 3e pru el valor de ias variabls )\n');
wntana-mribet (4, " \n') ;
ventana-~criktí4,' val i = 5\n'i;
ventana-!xcriktí4,' dir -> ih'i;
ventana-escribet(4," val j = an');
wntana-mribet(4,' dir -) jW1;
>
,
'r
.
BlbliogiCrf ir.
Kel ley Al /Pohl Era.
LenQuaje C.Introduccion a la Programacion.
Ed. ADDISM\I-Wealey Iberoamericana.
1987.
Schi 1 dt ,Herbert.
Frogramacion en Turbo C.
Ed. flctraw-Hi 11.
1988.
'
Schildt,Herbert.
C : Guia para ~twat-io5expertos,
Ed. McGraw-Hill.
1909,
Sc h i 1 dt He f- bet-t
C : Manual de ReSerencia.
Ed. McGraw-Hi 11.
1988.
Descargar