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.