/* Olimpo.h 2.0  -  Pedro Reina, Agosto 1995 */
#ifndef _OLIMPO_
#define _OLIMPO_
#define OLIMPO_QL
#include <stdio.h>            
#define NULO NULL
#define NIL  0
typedef unsigned char logico;
#define NO ((logico)0)
#define SI ((logico)1)
typedef unsigned char      octeto;   
typedef signed char        menudo;   
typedef unsigned short int contpos;  
typedef signed short int   contador; 
typedef unsigned long int  entpos;   
typedef signed long int    entero;   
typedef float real;
#define Abs(x)     ( ((x)>0) ? (x) : (-(x)) )
#define Min(x,y)   ( ((x)<(y)) ? (x) : (y) )
#define Max(x,y)   ( ((x)>(y)) ? (x) : (y) )
#define Signo(x)  ((menudo)(((x)>0)-((x)<0)))
#define DivEx(x,y)  (((x)/(y))+(((x)%(y))>0))
#include <stdlib.h>    
#include <string.h>    
#define MEM_MOTOROLA ((octeto)0)  
#define MEM_INTEL    ((octeto)1)  
typedef octeto *memoria;
void     Mem_Intercambia();
void     Mem_IntercambiaLarga();
contpos  Mem_LeeContpos();
contpos  Mem_EscribeContpos();
contador Mem_LeeContador();
contador Mem_EscribeContador();
entpos   Mem_LeeEntpos();
entpos   Mem_EscribeEntpos();
entero   Mem_LeeEntero();
entero   Mem_EscribeEntero();
#define Mem_Crea(t)  ((memoria)malloc((size_t)t))
#define Mem_Ajusta(m,t)  ((memoria)realloc((memoria)m,(size_t)t))
#define Mem_Destruye(m)  ((memoria)m?(free((memoria)m),SI):NO)
#define Mem_Asigna(m,v,c)  memset(m,v,c)
#define Mem_Copia(d,o,c)  memcpy(d,o,(size_t)c)
#define Mem_LeeOcteto(m)  (*((memoria)(m)))
#define Mem_EscribeOcteto(m,v)  (*((memoria)(m))=(octeto)(v))
#define Mem_LeeMenudo(m)  ((menudo)*((memoria)(m)))
#define Mem_EscribeMenudo(m,v)  (*((memoria)(m))=(menudo)(v))
#include <qlib.h>      
#define PAN_TEXTO    (octeto)0
#define PAN_GRAFICO  (octeto)1
#define PAN_ARRIBA   (octeto)0
#define PAN_ABAJO    (octeto)1
#define NEGRO   (octeto)0
#define ROJO    (octeto)2
#define VERDE   (octeto)4
#define BLANCO  (octeto)7
extern octeto Pan_Mod_;        
void   Pan_Resalta();
void   Pan_CursorVisible();
void   Pan_Bloque();
void   Pan_Mueve();
logico Pan_EntPos();
logico Pan_EntSig();
#define Pan_Ancho()  (octeto)80
#define Pan_Alto()  (octeto)24
#define Pan_AnchoCar()  (octeto)6
#define Pan_AltoCar()  (octeto)10
#define Pan_MargenSuperior()  (octeto)3
#define Pan_MargenIzquierdo()  (octeto)15
#define Pan_Canal()  fgetchid(stdout)
#define Pan_Comienzo()  131072
#define Pan_Modo()  Pan_Mod_
#define Pan_Limpia()  ( sd_clear(Pan_Canal(),-1L), SI )
#define Pan_Tinta(c)  ( sd_setin(Pan_Canal(),-1L,(int)c), SI )
#define Pan_Papel(c)  ( sd_setpa(Pan_Canal(),-1L,(int)c),  \
                        sd_setst(Pan_Canal(),-1L,(int)c), SI )
#define Pan_Color(p,t)   ( Pan_Papel(p) , Pan_Tinta(t) )
#define Pan_Cursor(f,c)  ( sd_pos(Pan_Canal(),-1L,(int)c,(int)f) , SI )
#define Pan_BorraLinea(f)  ( Pan_Cursor(f,0),sd_clrln(Pan_Canal(),-1L),SI )
#define Pan_Caracter(c)  ( putch(c) , SI )
#define Pan_PonCar(fil,col,car)  (Pan_Cursor(fil,col),Pan_Caracter(car))
#define Pan_Texto(t)  ( printf(t) , SI )
#define Pan_PonTexto(fil,col,t)  (Pan_Cursor(fil,col),Pan_Texto(t))
#define Pan_Entero(e,a)  ( (e) > 0 ? Pan_EntPos((entpos)e,a) \
                                   : Pan_EntSig((entero)e,a) )
#define Pan_PonEntero(fil,col,e,a)  (Pan_Cursor(fil,col),Pan_Entero(e,a))
#define Pan_Real(r,a,d)   ( printf("%*.*f",a,d,(real)r) , SI )
#define Pan_PonReal(f,c,r,a,d)  ( Pan_Cursor(f,c), Pan_Real(r,a,d) )
#define Pan_PonTextoControlado(f,c,t,n)  (Pan_Cursor(f,c), \
                                          Pan_TextoControlado(t,n))
#define Pan_Borra(c,f1,c1,f2,c2) ( Pan_Bloque(c,Pan_AnchoCar()*((c2)-(c1)+1),\
                                   Pan_AltoCar()*((f2)-(f1)+1),\
                                   Pan_AnchoCar()*(c1), Pan_AltoCar()*(f1)),SI)
#define Azr_Inicia()  srand((unsigned)mt_rclck())
#define Azr_Entero(a,b)  ((a)+(rand()%((b)-(a)+1)))
#define TIM_REFRESCO  50
contador Tim_Ano();
octeto   Tim_Mes();
octeto   Tim_Dia();
octeto   Tim_Hora();
octeto   Tim_Minuto();
octeto   Tim_Segundo();
#define Tim_Crono()  ((real)(mt_rclck()%86400))
#define Tim_Espera(s)    mt_susjb(mt_inf(NULL,NULL),\
                                 (int)(((real)(s))*TIM_REFRESCO),NULL)
extern logico Son_Encendido_;
logico Son_Ejecuta();
#define Son_Estado()  Son_Encendido_
#define Son_Cambia()  (Son_Encendido_=!Son_Encendido_)
#define Son_Enciende()  (Son_Encendido_ = SI)
#define Son_Apaga()  (Son_Encendido_ = NO)
#define Son_Error()   Son_Ejecuta(18000,100,102,1,1,0,0,0)
#define Son_MalaTecla()   Son_Ejecuta(1000,3000,0,0,0,0,0,0)
#define Son_Bien()   Son_Ejecuta(500,10,0,0,0,0,0,0)
typedef unsigned char caracter;
logico   Car_EsMayus();
logico   Car_EsMinus();
caracter Car_Mayus();
caracter Car_Minus();
caracter Car_ConvierteQLaPC();
caracter Car_ConviertePCaQL();
caracter Car_ConvierteQLaANSI();
caracter Car_ConvierteANSIaQL();
caracter Car_ConviertePCaANSI();
caracter Car_ConvierteANSIaPC();
contador Car_Compara();              
#define CAR_A_AGUDO  140
#define CAR_E_AGUDO  131
#define CAR_I_AGUDO  147
#define CAR_O_AGUDO  150
#define CAR_U_AGUDO  153
#define CAR_A_GRAVE  141
#define CAR_E_GRAVE  144
#define CAR_I_GRAVE  148
#define CAR_O_GRAVE  151
#define CAR_U_GRAVE  154
#define CAR_A_CIRCUNFLEJO  142
#define CAR_E_CIRCUNFLEJO  145
#define CAR_I_CIRCUNFLEJO  149
#define CAR_O_CIRCUNFLEJO  152
#define CAR_U_CIRCUNFLEJO  155
#define CAR_A_DIERESIS  128
#define CAR_E_DIERESIS  143
#define CAR_I_DIERESIS  146
#define CAR_O_DIERESIS  132
#define CAR_U_DIERESIS  135
#define CAR_MAY_A_DIERESIS  160
#define CAR_MAY_O_DIERESIS  164
#define CAR_MAY_U_DIERESIS  167
#define CAR_MAY_E_AGUDO  163
#define CAR_N_TILDE     137
#define CAR_MAY_N_TILDE 169
#define CAR_C_CEDILLA     136
#define CAR_MAY_C_CEDILLA 168
#define CAR_ADMIRACION    179
#define CAR_INTERROGACION 180
#define CAR_AE      138
#define CAR_MAY_AE  170
#define CAR_ALFA   172
#define CAR_BETA   156
#define CAR_DELTA  173
#define CAR_FI     178
#define CAR_MU     176
#define CAR_PI     177
#define CAR_DIVISION  187
#define CAR_ANGSTROM  162
#define CAR_COMILLA_ABRIR   184
#define CAR_COMILLA_CERRAR  185
#define CAR_FINPARRAFO      182
#define CAR_LIBRA    96
#define CAR_CENTAVO  157
#define CAR_YEN      158
#define CAR_FLECHA_ARRIBA    190
#define CAR_FLECHA_ABAJO     191
#define CAR_FLECHA_DERECHA   189
#define CAR_FLECHA_IZQUIERDA 188
typedef struct Lis_ST {
                      memoria        Contenido;
                      struct Lis_ST *Siguiente;
                      } Lis_st, *lista;
lista  Lis_Crea();
lista  Lis_Agrega();
lista  Lis_AgregaFin();
lista  Lis_Anota();
lista  Lis_AnotaFin();
lista  Lis_Ordena();
entero Lis_Total();
void   Lis_Destruye();
#define Lis_Contenido(L)  ( (L) -> Contenido )
#define Lis_PonContenido(L,C)  ( (L)->Contenido = (memoria)(C) )
#define Lis_Siguiente(L)  ( (L) -> Siguiente )
#define Lis_PonSiguiente(L,S)  ( (L)->Siguiente = (S) )
typedef struct {
               octeto  Modo;
               octeto  Ancho;
               octeto  Alto;
               memoria Dato;
               octeto  Columna;
               octeto  BitsIzquierda;
               octeto  BitsDerecha;
               } Trz_st, *trozo;
trozo  Trz_Crea();
void   Trz_Destruye();
logico Trz_Restituye();
#define Trz_Modo(t)  ((t)->Modo)
#define Trz_PonModo(t,m)  ((t)->Modo=(m))
#define Trz_Ancho(t)  ((t)->Ancho)
#define Trz_PonAncho(t,a)  ((t)->Ancho=(a))
#define Trz_Alto(t)  ((t)->Alto)
#define Trz_PonAlto(t,a)  ((t)->Alto=(a))
#define Trz_Dato(t)  ((t)->Dato)
#define Trz_PonDato(t,m)  ((t)->Dato=(m))
#define Trz_Columna(t)  ((t)->Columna)
#define Trz_PonColumna(t,b)  ((t)->Columna=(octeto)(b))
#define Trz_BitsIzquierda(t)  ((t)->BitsIzquierda)
#define Trz_PonBitsIzquierda(t,b)  ((t)->BitsIzquierda=(octeto)(b))
#define Trz_BitsDerecha(t)  ((t)->BitsDerecha)
#define Trz_PonBitsDerecha(t,b)  ((t)->BitsDerecha=(octeto)(b))
#define Trz_Cabe(t,f,c)  (((c)+Trz_Ancho(Trozo)<=Pan_Ancho()) && \
                          ((f)+Trz_Alto(Trozo)<=Pan_Alto()))
typedef struct {
               contador MargenIzquierdo;   
               contador MargenSuperior;    
               contador AnchoFisico;       
               contador AltoFisico;        
               real     Ancho;             
               real     Alto;              
               real     OrigenX;           
               real     OrigenY;           
               octeto   FilSup;            
               octeto   FilInf;            
               octeto   ColIzq;            
               octeto   ColDer;            
               } Zon_st, *zona;
zona   Zon_Crea();
zona   Zon_Escala();
zona   Zon_Bloque();
zona   Zon_Linea();
logico Zon_PixelFisico();
logico Zon_OxelFisico();
contador Zon_AnchoEnOxel();
contador Zon_PrimerUtil();
#define Zon_MargenIzquierdo(z)  ((z)->MargenIzquierdo)
#define Zon_PonMargenIzquierdo(z,v)  ((z)->MargenIzquierdo=(v))
#define Zon_MargenSuperior(z)  ((z)->MargenSuperior)
#define Zon_PonMargenSuperior(z,v)  ((z)->MargenSuperior=(v))
#define Zon_AnchoFisico(z)  ((z)->AnchoFisico)
#define Zon_PonAnchoFisico(z,v)  ((z)->AnchoFisico=(v))
#define Zon_AltoFisico(z)  ((z)->AltoFisico)
#define Zon_PonAltoFisico(z,v)  ((z)->AltoFisico=(v))
#define Zon_Ancho(z)  ((z)->Ancho)
#define Zon_PonAncho(z,v)  ((z)->Ancho=(v))
#define Zon_Alto(z)  ((z)->Alto)
#define Zon_PonAlto(z,v)  ((z)->Alto=(v))
#define Zon_OrigenX(z)  ((z)->OrigenX)
#define Zon_PonOrigenX(z,v)  ((z)->OrigenX=(v))
#define Zon_OrigenY(z)  ((z)->OrigenY)
#define Zon_PonOrigenY(z,v)  ((z)->OrigenY=(v))
#define Zon_FilSup(z)  ((z)->FilSup)
#define Zon_PonFilSup(z,v)  ((z)->FilSup=(v))
#define Zon_FilInf(z)  ((z)->FilInf)
#define Zon_PonFilInf(z,v)  ((z)->FilInf=(v))
#define Zon_ColIzq(z)  ((z)->ColIzq)
#define Zon_PonColIzq(z,v)  ((z)->ColIzq=(v))
#define Zon_ColDer(z)  ((z)->ColDer)
#define Zon_PonColDer(z,v)  ((z)->ColDer=(v))
#define Zon_Borra(z,c)  (Pan_Borra(c,Zon_FilSup(z),Zon_ColIzq(z), \
                                     Zon_FilInf(z),Zon_ColDer(z)))
#define Zon_Destruye(z)  Mem_Destruye(z)
#define Zon_Pixel(z,x,y,c)  (Zon_PixelPertenece(z,x,y) ? \
                             Zon_PixelSeguro(z,x,y,c)  : \
                             NO )
#define Zon_PixelPertenece(z,x,y)  (0 <= (x) && (x) < Zon_AnchoFisico(z) && \
                                    0 <= (y) && (y) < Zon_AltoFisico(z))
#define Zon_PixelSeguro(z,x,y,c)  Zon_PixelFisico(Zon_MargenIzquierdo(z)+x, \
                                                  Zon_MargenSuperior(z)+y,c)
#define Zon_Oxel(z,x,y,m,c)  (Zon_OxelPertenece(z,x,y)  ? \
                              Zon_OxelSeguro(z,x,y,m,c) : \
                              NO )
#define Zon_OxelPertenece(z,x,y) (0 <= (x) && (x) < Zon_AnchoEnOxel(z) && \
                                  0 <= (y) && (y) < Zon_AltoFisico(z))
#define Zon_OxelSeguro(z,x,y,m,c)  Zon_OxelFisico((x)+Zon_PrimerUtil(z)/8, \
                                                  Zon_MargenSuperior(z)+y,m,c)
#define Zon_Abscisa(z,x)  ((contador)(((x+Zon_OrigenX(z))*Zon_AnchoFisico(z) \
                    /Zon_Ancho(z))+(Zon_Ancho(z)<0)*Zon_AnchoFisico(z)-0.5))
#define Zon_Ordenada(z,y)  ((contador)(-((y+Zon_OrigenY(z))*Zon_AltoFisico(z) \
                        /Zon_Alto(z))+(Zon_Alto(z)>0)*Zon_AltoFisico(z)-0.5))
#define Zon_Punto(z,x,y,c)  (Zon_Pixel(z,Zon_Abscisa(z,x),Zon_Ordenada(z,y),c))
#define Zon_PuntoSeguro(z,x,y,c)  (Zon_PixelSeguro(z,Zon_Abscisa(z,x), \
                                                     Zon_Ordenada(z,y),c))
#include <stdarg.h>             
typedef char * cadena;
#define CAD_FIN  ((cadena)NIL)
cadena   Cad_Une (cadena C, ...);
cadena   Cad_Crea ();
cadena   Cad_Trozo ();
cadena   Cad_Cambia ();
cadena   Cad_Mueve ();
cadena   Cad_QuitaCar ();
cadena   Cad_Duplica ();
cadena   Cad_EntPos ();
cadena   Cad_EntSig ();
cadena   Cad_Mayus ();
cadena   Cad_Minus ();
cadena   Cad_ConvierteQLaPC ();
cadena   Cad_ConviertePCaQL ();
cadena   Cad_ConvierteQLaANSI ();
cadena   Cad_ConvierteANSIaQL ();
cadena   Cad_ConviertePCaANSI ();
cadena   Cad_ConvierteANSIaPC ();
cadena   Cad_RecortaFinal ();        
contador Cad_Subcadena ();
contador Cad_PrimerUtil ();
contador Cad_CarPertenece ();
contador Cad_Compara ();
#define Cad_Destruye(c)   Mem_Destruye(c)
#define Cad_Copia(d,o)  ((cadena)strcpy((char *)d,(char *)o))
#define Cad_Longitud(c)  ((contador)strlen((char *)c))
#define Cad_Igual(c,d)  (!strcmp((char *)c,(char *)d))
#define Cad_Entero(n)  ( (n)>0 ? Cad_EntPos((entpos)(n)) \
                               : Cad_EntSig((entero)(n)) )
void Prg_Presenta();
typedef struct {
               contador Ano;
               octeto   Mes;
               octeto   Dia;
               } Fec_st, *fecha;
fecha  Fec_Crea();
entero Fec_Factor();
octeto Fec_DiaSemana();
cadena Fec_Cadena();
fecha  Fec_LeeCadena();
#define Fec_Ano(f)  ((f)->Ano)
#define Fec_PonAno(f,a)  (((f)->Ano)=(a))
#define Fec_Mes(f)  ((f)->Mes)
#define Fec_PonMes(f,m)  (((f)->Mes)=(m))
#define Fec_Dia(f)  ((f)->Dia)
#define Fec_PonDia(f,d)  (((f)->Dia)=(d))
#define Fec_Destruye(f)  Mem_Destruye(f)
#define Fec_Diferencia(f1,f2)  (Fec_Factor(f2)-Fec_Factor(f1))
#define Fec_Hoy()  Fec_Crea(Tim_Ano(),Tim_Mes(),Tim_Dia())
typedef unsigned short int tecla;
extern tecla Tec_Ultima_;
tecla  Tec_Pulsada();
tecla  Tec_Validada();
tecla  Tec_ValidadaRapido();
tecla  Tec_Pertenece();
logico Tec_FijadoMayus();
#define Tec_Ultima()   Tec_Ultima_
#define Tec_Mayus(t)   ( ((t)<256) ? ((tecla)Car_Mayus((caracter)(t))) : (t) )
#define Tec_Minus(t)   ( ((t)<256) ? ((tecla)Car_Minus((caracter)(t))) : (t) )
#define Tec_Disponible()  kbhit()
#define Tec_Min()  32
#define Tec_Max() 191
#define TEC_ESC           27    
#define TEC_ENTER         10    
#define TEC_ESPACIO       32    
#define TEC_ARRIBA         208  
#define TEC_ABAJO          216  
#define TEC_IZQUIERDA      192  
#define TEC_DERECHA        200  
#define TEC_INICIO         193  
#define TEC_FIN            201  
#define TEC_AVPAG          217  
#define TEC_REPAG          209  
#define TEC_CTRL_INICIO    195  
#define TEC_CTRL_FIN       203  
#define TEC_CTRL_AVPAG     219  
#define TEC_CTRL_REPAG     211  
#define TEC_INSERTAR       228  
#define TEC_SUPRIMIR       202  
#define TEC_RETROCESO      194  
#define TEC_TAB            9    
#define TEC_MAY_TAB        253  
#define TEC_A        97        
#define TEC_B        98        
#define TEC_C        99        
#define TEC_D       100        
#define TEC_E       101        
#define TEC_F       102        
#define TEC_G       103        
#define TEC_H       104        
#define TEC_I       105        
#define TEC_J       106        
#define TEC_K       107        
#define TEC_L       108        
#define TEC_M       109        
#define TEC_N       110        
#define TEC_O       111        
#define TEC_P       112        
#define TEC_Q       113        
#define TEC_R       114        
#define TEC_S       115        
#define TEC_T       116        
#define TEC_U       117        
#define TEC_V       118        
#define TEC_W       119        
#define TEC_X       120        
#define TEC_Y       121        
#define TEC_Z       122        
#define TEC_MAY_A    65        
#define TEC_MAY_B    66        
#define TEC_MAY_C    67        
#define TEC_MAY_D    68        
#define TEC_MAY_E    69        
#define TEC_MAY_F    70        
#define TEC_MAY_G    71        
#define TEC_MAY_H    72        
#define TEC_MAY_I    73        
#define TEC_MAY_J    74        
#define TEC_MAY_K    75        
#define TEC_MAY_L    76        
#define TEC_MAY_M    77        
#define TEC_MAY_N    78        
#define TEC_MAY_O    79        
#define TEC_MAY_P    80        
#define TEC_MAY_Q    81        
#define TEC_MAY_R    82        
#define TEC_MAY_S    83        
#define TEC_MAY_T    84        
#define TEC_MAY_U    85        
#define TEC_MAY_V    86        
#define TEC_MAY_W    87        
#define TEC_MAY_X    88        
#define TEC_MAY_Y    89        
#define TEC_MAY_Z    90        
#define TEC_0        48        
#define TEC_1        49        
#define TEC_2        50        
#define TEC_3        51        
#define TEC_4        52        
#define TEC_5        53        
#define TEC_6        54        
#define TEC_7        55        
#define TEC_8        56        
#define TEC_9        57        
#define TEC_CTRL_A        1     
#define TEC_CTRL_B        2     
#define TEC_CTRL_C        3     
#define TEC_CTRL_D        4     
#define TEC_CTRL_E        5     
#define TEC_CTRL_F        6     
#define TEC_CTRL_G        7     
#define TEC_CTRL_H        8     
#define TEC_CTRL_I        9     
#define TEC_CTRL_J        10    
#define TEC_CTRL_K        11    
#define TEC_CTRL_L        12    
#define TEC_CTRL_M        13    
#define TEC_CTRL_N        14    
#define TEC_CTRL_O        15    
#define TEC_CTRL_P        16    
#define TEC_CTRL_Q        17    
#define TEC_CTRL_R        18    
#define TEC_CTRL_S        19    
#define TEC_CTRL_T        20    
#define TEC_CTRL_U        21    
#define TEC_CTRL_V        22    
#define TEC_CTRL_W        23    
#define TEC_CTRL_X        24    
#define TEC_CTRL_Y        25    
#define TEC_CTRL_Z        26    
#define TEC_ALT_A         353   
#define TEC_ALT_B         354   
#define TEC_ALT_C         355   
#define TEC_ALT_D         356   
#define TEC_ALT_E         357   
#define TEC_ALT_F         358   
#define TEC_ALT_G         359   
#define TEC_ALT_H         360   
#define TEC_ALT_I         361   
#define TEC_ALT_J         362   
#define TEC_ALT_K         363   
#define TEC_ALT_L         364   
#define TEC_ALT_M         365   
#define TEC_ALT_N         366   
#define TEC_ALT_O         367   
#define TEC_ALT_P         368   
#define TEC_ALT_Q         369   
#define TEC_ALT_R         370   
#define TEC_ALT_S         371   
#define TEC_ALT_T         372   
#define TEC_ALT_U         373   
#define TEC_ALT_V         374   
#define TEC_ALT_W         375   
#define TEC_ALT_X         376   
#define TEC_ALT_Y         377   
#define TEC_ALT_Z         378   
#define TEC_ALT_0         304   
#define TEC_ALT_1         305   
#define TEC_ALT_2         306   
#define TEC_ALT_3         307   
#define TEC_ALT_4         308   
#define TEC_ALT_5         309   
#define TEC_ALT_6         310   
#define TEC_ALT_7         311   
#define TEC_ALT_8         312   
#define TEC_ALT_9         313   
#define TEC_F1            232   
#define TEC_F2            236   
#define TEC_F3            240   
#define TEC_F4            244   
#define TEC_F5            248   
#define TEC_MAY_F1        234   
#define TEC_MAY_F2        238   
#define TEC_MAY_F3        242   
#define TEC_MAY_F4        246   
#define TEC_MAY_F5        250   
#define TEC_CTRL_F1       233   
#define TEC_CTRL_F2       237   
#define TEC_CTRL_F3       241   
#define TEC_CTRL_F4       245   
#define TEC_ALT_F1        488   
#define TEC_ALT_F2        492   
#define TEC_ALT_F3        496   
#define TEC_ALT_F4        500   
#define TEC_ALT_F5        504   
#define CDR_SIMPLE  (octeto)0
#define CDR_DOBLE   (octeto)1
#define CDR_ARRIBA  0
#define CDR_CENTRO  1
#define CDR_CORTE   2
#define CDR_ABAJO   3
void   Cdr_Dibuja();
lista  Cdr_Construye();
void   Cdr_Linea();
cadena Cdr_LineaVariada();
void Cdr_LineaInterna();
#define Cdr_Caja(Tipo,F1,C1,F2,C2,p,t)  Cdr_Dibuja(Tipo,Tipo,\
                                    1,(F2)-(F1)-1,1,(C2)-(C1)-1,F1,C1,p,t)
typedef struct {
               octeto FilSup;
               octeto FilInf;
               octeto ColIzq;
               octeto ColDer;
               octeto Papel;
               octeto Tinta;
               trozo  Trozo;
               } Reg_st, *region;
region Reg_Crea();
void   Reg_Destruye();
logico Reg_Lee();
logico Reg_Escribe();
#define Reg_FilSup(r)  ((r)->FilSup)
#define Reg_PonFilSup(r,v)  ((r)->FilSup=(v))
#define Reg_FilInf(r)  ((r)->FilInf)
#define Reg_PonFilInf(r,v)  ((r)->FilInf=(v))
#define Reg_ColIzq(r)  ((r)->ColIzq)
#define Reg_PonColIzq(r,v)  ((r)->ColIzq=(v))
#define Reg_ColDer(r)  ((r)->ColDer)
#define Reg_PonColDer(r,v)  ((r)->ColDer=(v))
#define Reg_DiPapel(r)  ((r)->Papel)
#define Reg_Papel(r,p)  ((r)->Papel=(p))
#define Reg_DiTinta(r)  ((r)->Tinta)
#define Reg_Tinta(r,p)  ((r)->Tinta=(p))
#define Reg_Color(r,p,t)  (Reg_Papel(r,p),Reg_Tinta(r,t))
#define Reg_Trozo(r)  ((r)->Trozo)
#define Reg_PonTrozo(r,t)  ((r)->Trozo=(t))
#define Reg_Ancho(r)  (Reg_ColDer(r)-Reg_ColIzq(r)+1)
#define Reg_Alto(r)  (Reg_FilInf(r)-Reg_FilSup(r)+1)
#define Reg_Limpia(r,c)  (Pan_Borra(c,Reg_FilSup(r),Reg_ColIzq(r), \
                                      Reg_FilInf(r),Reg_ColDer(r)))
#define Reg_Cursor(r,f,c)  Pan_Cursor(Reg_FilSup(r)+f,Reg_ColIzq(r)+c)
#define Reg_Borde(r,t,p,l)  (Cdr_Caja(t,Reg_FilSup(r),Reg_ColIzq(r), \
                                      Reg_FilInf(r),Reg_ColDer(r),p,l))
#define Reg_LimpiaInterior(r,c)  (Pan_Borra(c,Reg_FilSup(r)+1,      \
                                  Reg_ColIzq(r)+1, Reg_FilInf(r)-1, \
                                  Reg_ColDer(r)-1))
#define Reg_PonCar(r,f,c,car)  (Reg_Cursor(r,f,c),                        \
                                Pan_Color(Reg_DiPapel(r),Reg_DiTinta(r)), \
                                Pan_Caracter(car))
#define Reg_PonTexto(r,f,c,t)  (Reg_Cursor(r,f,c),                        \
                                Pan_Color(Reg_DiPapel(r),Reg_DiTinta(r)), \
                                Pan_Texto(t))
#define Reg_PonEntero(r,f,c,e,a)  (Reg_Cursor(r,f,c),                     \
                                Pan_Color(Reg_DiPapel(r),Reg_DiTinta(r)), \
                                Pan_Entero(e,a))
#define Reg_PonReal(r,f,c,n,a,d)  ( Reg_Cursor(r,f,c),                    \
                                Pan_Color(Reg_DiPapel(r),Reg_DiTinta(r)), \
                                Pan_Real(n,a,d) )
#define USR_MENSAJE 22
logico   Usr_Consulta();
void     Usr_BorraZona();
void     Usr_Informa();
void     Usr_Avisa();
void     Usr_ErrorFatal();
void     Usr_Indica();
void     Usr_IndicaModo();
void     Usr_IndicaMayus();
contador Usr_Entero();
cadena   Usr_Texto();
cadena   Usr_Edita();
#define FCH_TEXTO      (octeto)0
#define FCH_BINARIO    (octeto)1
typedef struct {
               FILE  *Manejador;
               cadena NombreReal;
               } Fch_st, *fichero;
logico  Fch_Existe();
fichero Fch_Abre();
fichero Fch_AbreLeer();
fichero Fch_AbreGrabar();
fichero Fch_AbreActualizar();
logico  Fch_Cierra();
void    Fch_Borra();
cadena  Fch_LeeLinea();
logico  Fch_EscribeLinea();
cadena  Fch_Nombre();
lista   Fch_ListaNombre();
#define Fch_Manejador(f)  ((f)->Manejador)
#define Fch_PonManejador(f,p)  ((f)->Manejador=(p))
#define Fch_NombreReal(f)  ((f)->NombreReal)
#define Fch_PonNombreReal(f,n)  ((f)->NombreReal=Cad_Duplica(n))
#define Fch_Separador()  '_' 
#define Fch_EscribeOcteto(F,Z,N)  (fwrite((char *)Z,(size_t)1,N, \
                                   Fch_Manejador(F))==N) 
#define Fch_LeeOcteto(F,Z,N)  (fread((char *)Z,(size_t)1,N, \
                               Fch_Manejador(F))==N) 
#define Fch_Coloca(f,p)  (fseek(Fch_Manejador(f),(long)p,SEEK_SET)==0)
#define Fch_ColocaFinal(f)  (fseek(Fch_Manejador(f),0L,SEEK_END)==0)
#define Fch_Posicion(f)    (ftell(Fch_Manejador(f)))
#define MEN_HORIZONTAL  (octeto)0
#define MEN_VERTICAL    (octeto)1
#define MEN_VECTOR  (octeto)0
#define MEN_LISTA   (octeto)1
#define MEN_PROPIO  (octeto)2
#define MEN_NO     (octeto)0
#define MEN_SI     (octeto)1
#define MEN_TRATA  (octeto)2
#define MEN_MAXLONG  (octeto)81
typedef struct {
               octeto  Modo;
               octeto  FilSup;
               octeto  ColIzq;
               octeto  Ancho;
               octeto  Alto;
               octeto  Papel;
               octeto  Tinta;
               octeto  PapelResaltado;
               octeto  TintaResaltado;
               octeto  ColorCarNormal;
               octeto  ColorCarResaltado;
               octeto  ColorNoDisponible;
               octeto  ColorFlecha;
               octeto  Tipo;
               memoria DatoOpcion;
               entero  Total;
               tecla  *TeclaSi;
               tecla  *TeclaNo;
               logico *Disponible;
               octeto *Lugar;
               octeto *Columna;
               } Men_st, *menu;
typedef logico (*men_funcion)();  
entero Men_Horizontal();
entero Men_Vertical();
entero Men_TotalOpcion();
menu   Men_Crea();
menu   Men_CreaObjeto();
void   Men_Color();
void   Men_Destruye();
void   Men_Escribe();
logico Men_Texto();
logico Men_Muestra();
void   Men_EscribeHorizontal();
void   Men_EscribeVerticalFijo();
void   Men_EscribeVerticalMovil();
void   Men_EscribeNormal();
void   Men_EscribeResaltado();
void   Men_IndicaHayMas();
octeto Men_Tecla();
void   Men_CalculaPrimeroUltimo();
entero Men_Ejecuta();
entero Men_EjecutaHorizontal();
entero Men_EjecutaVerticalFijo();
entero Men_EjecutaVerticalMovil();
tecla *Men_AgregaAtajo();
#define Men_Modo(m)  ((m)->Modo)
#define Men_PonModo(m,d)  ((m)->Modo=(d))
#define Men_FilSup(m)  ((m)->FilSup)
#define Men_PonFilSup(m,v)  ((m)->FilSup=(v))
#define Men_ColIzq(m)  ((m)->ColIzq)
#define Men_PonColIzq(m,c)  ((m)->ColIzq=(c))
#define Men_Ancho(m)  ((m)->Ancho)
#define Men_PonAncho(m,a)  ((m)->Ancho=a)
#define Men_Alto(m)  ((m)->Alto)
#define Men_PonAlto(m,a)  ((m)->Alto=a)
#define Men_FilInf(m)  (Men_FilSup(m)+Men_Alto(m)-1)
#define Men_ColDer(m)  (Men_ColIzq(m)+Men_Ancho(m)-1)
#define Men_Papel(m)  ((m)->Papel)
#define Men_PonPapel(m,p)  ((m)->Papel=(p))
#define Men_Tinta(m)  ((m)->Tinta)
#define Men_PonTinta(m,t)  ((m)->Tinta=(t))
#define Men_PapelResaltado(m)  ((m)->PapelResaltado)
#define Men_PonPapelResaltado(m,p)  ((m)->PapelResaltado=(p))
#define Men_TintaResaltado(m)  ((m)->TintaResaltado)
#define Men_PonTintaResaltado(m,p)  ((m)->TintaResaltado=(p))
#define Men_ColorCarNormal(m)  ((m)->ColorCarNormal)
#define Men_PonColorCarNormal(m,c)  ((m)->ColorCarNormal=(c))
#define Men_ColorCarResaltado(m)  ((m)->ColorCarResaltado)
#define Men_PonColorCarResaltado(m,r)  ((m)->ColorCarResaltado=(r))
#define Men_ColorNoDisponible(m)  ((m)->ColorNoDisponible)
#define Men_PonColorNoDisponible(m,n)  ((m)->ColorNoDisponible=(n))
#define Men_ColorFlecha(m)  ((m)->ColorFlecha)
#define Men_PonColorFlecha(m,f)  ((m)->ColorFlecha=(f))
#define Men_Tipo(m)  ((m)->Tipo)
#define Men_PonTipo(m,t)  ((m)->Tipo=(t))
#define Men_DatoOpcion(m)  ((m)->DatoOpcion)
#define Men_PonDatoOpcion(m,d)  ((m)->DatoOpcion=(d))
#define Men_Total(m)  ((m)->Total)
#define Men_PonTotal(m,t)  ((m)->Total=(t))
#define Men_DirDisponible(m)  ((m)->Disponible)
#define Men_PonDirDisponible(m,d)  ((m)->Disponible=(d))
#define Men_DiDisponible(m,n)  (Men_DirDisponible(m)[(n)-1])
#define Men_Disponible(m,n,e)  (Men_DirDisponible(m)[(n)-1]=(e))
#define Men_DiTeclaSi(m)  ((m)->TeclaSi)
#define Men_TeclaSi(m,t)  ((m)->TeclaSi=(t))
#define Men_DiTeclaNo(m)  ((m)->TeclaNo)
#define Men_TeclaNo(m,t)  ((m)->TeclaNo=(t))
#define Men_TextoVector(m,n)  (((cadena *)Men_DatoOpcion(m))[(n)-1])
#define Men_PonTextoVector(m,n,t)  (((cadena *)Men_DatoOpcion(m))[(n)-1]=(t))
#define Men_DirLugar(m)  ((m)->Lugar)
#define Men_PonDirLugar(m,d)  ((m)->Lugar=(d))
#define Men_Lugar(m,n)  (Men_DirLugar(m)[(n)-1])
#define Men_PonLugar(m,n,g)  (Men_DirLugar(m)[(n)-1]=(g))
#define Men_DirColumna(m)  ((m)->Columna)
#define Men_PonDirColumna(m,d)  ((m)->Columna=(d))
#define Men_Columna(m,n)  (Men_DirColumna(m)[(n)-1])
#define Men_PonColumna(m,n,c)  (Men_DirColumna(m)[(n)-1]=(c))
#define Men_Cabe(m)  (Men_Total(m)<=Men_Alto(m))
typedef struct {
               fichero Fichero;
               contpos Linea;
               } Cnf_st, *config;
config Cnf_Abre();
logico Cnf_Cierra();
cadena Cnf_Lee();
#define Cnf_Fichero(c)  ((c)->Fichero)
#define Cnf_PonFichero(c,f)  (((c)->Fichero)=(f))
#define Cnf_Linea(c)  ((c)->Linea)
#define Cnf_PonLinea(c,f)  (((c)->Linea)=(f))
#define Cnf_IncrementaLinea(c)  (((c)->Linea)++)
#define BDT_LECTURA       (octeto)0
#define BDT_ACTUALIZACION (octeto)1
#define BDT_LONGDESCRIPTOR 32
typedef struct {
               fichero  Fichero;
               octeto   DescriptorFichero[BDT_LONGDESCRIPTOR];
               memoria  DescriptoresCampo;
               memoria  InfoActual;
               entero   Actual;
               contador TotalCampo;
               entero   TotalRegistro;
               logico   Modificado;
               octeto   ModoApertura;
               entero   ComienzoRegistro;
               contador LongitudRegistro;
               } Bdt_st, *basedato;
basedato Bdt_CreaObjeto();
basedato Bdt_Abre();
void     Bdt_Cierra();
basedato Bdt_Crea();
void     Bdt_Destruye();
logico   Bdt_NombreDeCampo();
logico   Bdt_NumeroDeCampo();
logico   Bdt_LeeRegistro();
logico   Bdt_EscribeRegistro();
logico   Bdt_MarcaRegistro();
logico   Bdt_AgregaRegistro();
logico   Bdt_CampoNumero();
logico   Bdt_CampoNombre();
logico   Bdt_PonCampoNumero();
logico   Bdt_PonCampoNombre();
char     Bdt_TipoDeCampo();
contador Bdt_LongitudDeCampo();
contador Bdt_DecimalDeCampo();
#define Bdt_Fichero(b)  ((b)->Fichero)
#define Bdt_PonFichero(b,f)  (((b)->Fichero)=(f))
#define Bdt_DescriptorFichero(b)  ((b)->DescriptorFichero)
#define Bdt_DescriptoresCampo(b)  ((b)->DescriptoresCampo)
#define Bdt_PonDescriptoresCampo(b,d)  (((b)->DescriptoresCampo)=(d))
#define Bdt_InfoActual(b)  ((b)->InfoActual)
#define Bdt_PonInfoActual(b,d)  (((b)->InfoActual)=(d))
#define Bdt_Actual(b)  ((b)->Actual)
#define Bdt_PonActual(b,n)  (((b)->Actual)=(n))
#define Bdt_TotalCampo(b)  ((b)->TotalCampo)
#define Bdt_PonTotalCampo(b,n)  (((b)->TotalCampo)=(n))
#define Bdt_TotalRegistro(b)  ((b)->TotalRegistro)
#define Bdt_PonTotalRegistro(b,n)  (((b)->TotalRegistro)=(n))
#define Bdt_Modificado(b)  ((b)->Modificado)
#define Bdt_PonModificado(b,v)  (((b)->Modificado)=(v))
#define Bdt_ModoApertura(b)  ((b)->ModoApertura)
#define Bdt_PonModoApertura(b,m)  (((b)->ModoApertura)=(m))
#define Bdt_ComienzoRegistro(b)  ((b)->ComienzoRegistro)
#define Bdt_PonComienzoRegistro(b,n)  (((b)->ComienzoRegistro)=(n))
#define Bdt_LongitudRegistro(b)  ((b)->LongitudRegistro)
#define Bdt_PonLongitudRegistro(b,l)  (((b)->LongitudRegistro)=(l))
#define Bdt_AnoUltimo(b)  ((contador) (1900+Bdt_DescriptorFichero(b)[1]))
#define Bdt_PonAnoUltimo(b,a)  (Bdt_DescriptorFichero(b)[1]=(char)((a)-1900))
#define Bdt_MesUltimo(b)  ((octeto) (Bdt_DescriptorFichero(b)[2]))
#define Bdt_PonMesUltimo(b,m)  (Bdt_DescriptorFichero(b)[2]=(char)(m))
#define Bdt_DiaUltimo(b)  ((octeto) (Bdt_DescriptorFichero(b)[3]))
#define Bdt_PonDiaUltimo(b,d)  (Bdt_DescriptorFichero(b)[3]=(char)(d))
#define Bdt_ActivoRegistro(b)  (Bdt_InfoActual(b)[0]!='*')
#define Bdt_LimpiaRegistro(b)  (Mem_Asigna(Bdt_InfoActual(b),' ',  \
                                Bdt_LongitudRegistro(b)))
#define Bdt_BorraRegistro(b,n)  (Bdt_MarcaRegistro(b,n,'*'))
#define Bdt_RecuperaRegistro(b,n)  (Bdt_MarcaRegistro(b,n,' '))
#define MMO_LECTURA       (octeto)0
#define MMO_ACTUALIZACION (octeto)1
#define MMO_TAMANOBLOQUE 512   
typedef struct {
               fichero  Fichero;
               logico   Modificado;
               octeto   ModoApertura;
               contador Disponible;
               contador NumeroBloque;
               contador Posicion;
               memoria  Dato;
               } Mmo_st, *memo;
memo     Mmo_CreaObjeto();
memo     Mmo_Abre();
void     Mmo_Cierra();
void     Mmo_Limpia();
logico   Mmo_Anota();
memo     Mmo_Crea();
void     Mmo_Destruye();
cadena   Mmo_Lee();
contador Mmo_Escribe();
entero   Mmo_Longitud();
logico   Mmo_EscribeBloque();
logico   Mmo_EscribeTexto();
#define Mmo_Fichero(m)  ((m)->Fichero)
#define Mmo_PonFichero(m,f)  ((m)->Fichero=(f))
#define Mmo_Modificado(m)  ((m)->Modificado)
#define Mmo_PonModificado(m,l)  ((m)->Modificado=(l))
#define Mmo_ModoApertura(m)  ((m)->ModoApertura)
#define Mmo_PonModoApertura(m,d)  ((m)->ModoApertura=(d))
#define Mmo_Disponible(m)  ((m)->Disponible)
#define Mmo_PonDisponible(m,d)  ((m)->Disponible=(d))
#define Mmo_NumeroBloque(m)  ((m)->NumeroBloque)
#define Mmo_PonNumeroBloque(m,n)  ((m)->NumeroBloque=(n))
#define Mmo_IncrementaNumBloque(m)  (((m)->NumeroBloque)++)
#define Mmo_Dato(m)  ((m)->Dato)
#define Mmo_PonDato(m,d)  ((m)->Dato=(d))
#define Mmo_Posicion(m)  ((m)->Posicion)
#define Mmo_PonPosicion(m,p)  ((m)->Posicion=(p))
#define Mmo_IncrementaPosicion(m)  (((m)->Posicion)++)
#define IND_LECTURA       (octeto)0
#define IND_ACTUALIZACION (octeto)1
#define IND_PAGINA        1024        
#define IND_MINNIVEL      10          
#define IND_FUERA         (-1)        
#define IND_MAXCLAVE      100         
typedef struct {
               fichero   Fichero;
               octeto    ModoApertura;
               contador  LongitudClave;
               octeto    Pagina[IND_PAGINA];   
               contador  Nivel;                
               contador  MaxNivel;
               contador  ClavesPagina;
               contador *DirItem;     
               entero   *DirPosicion; 
               } Ind_st, *indice;
indice Ind_CreaObjeto();
indice Ind_Abre();
indice Ind_Crea();
void   Ind_Cierra();
void   Ind_Destruye();
entero Ind_Registro();
void   Ind_PonRegistro();
entero Ind_PaginaApuntada();
void   Ind_PonPaginaApuntada();
logico Ind_LeePagina();
logico Ind_EscribePagina();
entero Ind_NuevaPagina();
logico Ind_IncrementaNivel();
logico Ind_DecrementaNivel();
logico Ind_Primero();
logico Ind_Ultimo();
logico Ind_Siguiente();
logico Ind_Anterior();
logico Ind_Inserta();
cadena Ind_Clave();
void   Ind_PonClave();
void   Ind_AlmacenaClave();
#define Ind_Fichero(i)  ((i)->Fichero)
#define Ind_PonFichero(i,f)  (((i)->Fichero)=(f))
#define Ind_ModoApertura(i)  ((i)->ModoApertura)
#define Ind_PonModoApertura(i,m)  (((i)->ModoApertura)=(m))
#define Ind_LongitudClave(i)  ((i)->LongitudClave)
#define Ind_PonLongitudClave(i,l)  (((i)->LongitudClave)=(l))
#define Ind_Pagina(i)  ((i)->Pagina)
#define Ind_Nivel(i)  ((i)->Nivel)
#define Ind_PonNivel(i,n)  (((i)->Nivel)=(n))
#define Ind_ClavesPagina(i)  ((i)->ClavesPagina)
#define Ind_PonClavesPagina(i,c)  (((i)->ClavesPagina)=(c))
#define Ind_MaxNivel(i)  ((i)->MaxNivel)
#define Ind_PonMaxNivel(i,n)  (((i)->MaxNivel)=(n))
#define Ind_DirItem(i)  ((i)->DirItem)
#define Ind_PonDirItem(i,d)  (((i)->DirItem)=(d))
#define Ind_DirPosicion(i)  ((i)->DirPosicion)
#define Ind_PonDirPosicion(i,d)  (((i)->DirPosicion)=(d))
#define Ind_Cierra(i)  (Fch_Cierra(Ind_Fichero(i)),Ind_Destruye(i))
#define Ind_MaxItem(i)  (Mem_LeeContador(Ind_Pagina(i),MEM_INTEL))
#define Ind_PonMaxItem(i,c)  (Mem_EscribeContador(Ind_Pagina(i),MEM_INTEL,(c)))
#define Ind_Desplazamiento(i,n)  (Mem_LeeContador(Ind_Pagina(i)+2+2*(n), \
                                  MEM_INTEL))
#define Ind_PonDesplazamiento(i,n,d)  (Mem_EscribeContador(Ind_Pagina(i) \
                                       +2+2*(n), MEM_INTEL, d))
#define Ind_Item(i)  (Ind_DirItem(i)[Ind_Nivel(i)])
#define Ind_PonItem(i,n)  ((Ind_DirItem(i)[Ind_Nivel(i)])=(n))
#define Ind_Posicion(i)  (Ind_DirPosicion(i)[Ind_Nivel(i)])
#define Ind_PonPosicion(i,d)  ((Ind_DirPosicion(i)[Ind_Nivel(i)])=(d))
#define Ind_IncrementaItem(i)  ((Ind_DirItem(i)[Ind_Nivel(i)])++)
#define Ind_DecrementaItem(i)  ((Ind_DirItem(i)[Ind_Nivel(i)])--)
typedef struct {
               entero  Ancho;
               entero  Alto;
               entero  AnchoEnOxel;
               entero  Tamano;
               memoria Dato;
               } Dbn_st, *diblane;
diblane Dbn_Crea();
logico  Dbn_Edita();
void    Dbn_Destruye();
void    Dbn_Muestra();
void    Dbn_Coloca();
void    Dbn_ReflejaHorizontal();
void    Dbn_ReflejaVertical();
octeto  Dbn_PonPunto();
#define Dbn_Ancho(d)  ((d)->Ancho)
#define Dbn_PonAncho(d,a)  (((d)->Ancho)=(a))
#define Dbn_Alto(d)  ((d)->Alto)
#define Dbn_PonAlto(d,a)  (((d)->Alto)=(a))
#define Dbn_AnchoEnOxel(d)  ((d)->AnchoEnOxel)
#define Dbn_PonAnchoEnOxel(d,a)  (((d)->AnchoEnOxel)=(a))
#define Dbn_Tamano(d)  ((d)->Tamano)
#define Dbn_PonTamano(d,t)  (((d)->Tamano)=(t))
#define Dbn_Dato(d)  ((d)->Dato)
#define Dbn_PonDato(d,t)  (((d)->Dato)=(t))
#define Dbn_Punto(d,f,c)  ( (Dbn_Dato(d)[(f)*Dbn_AnchoEnOxel(d)+(c)/8] & \
                            128 >> (c)%8) > 0 )
#define TIF_CABECERA     8
#define TIF_LONGITUDTAG 12
#define TIF_MOTOROLA (octeto)0
#define TIF_INTEL    (octeto)1
#define TIF_SIN_COMPRESION (contpos)1
#define TIF_CCITT1D        (contpos)2
#define TIF_FAX3           (contpos)3
#define TIF_FAX4           (contpos)4
#define TIF_LZW            (contpos)5
#define TIF_JPEG           (contpos)6
#define TIF_PACKBITS   (contpos)32773
#define TIF_BLANCO_CERO  (contpos)0
#define TIF_NEGRO_CERO   (contpos)1
#define TIF_RGB          (contpos)2
#define TIF_PALETA       (contpos)3
#define TIF_MASCARA      (contpos)4
typedef struct {
               fichero  Fichero;
               octeto   Formato;
               contador TotalTag;
               contador TotalBanda;
               entero   ComienzoDir;
               contpos  MetodoCompr;
               memoria  Directorio;
               } Tif_st, *tiff;
tiff    Tif_CreaObjeto();
void    Tif_Destruye();
tiff    Tif_Abre();
void    Tif_Cierra();
tiff    Tif_Crea();
logico  Tif_LeeDirectorio();
contpos Tif_NumeroTag();
entero  Tif_ValorTag();
entero  Tif_Ancho();
entero  Tif_Alto();
logico  Tif_LeeDato();
logico  Tif_Siguiente();
contpos Tif_Compresion();
contpos Tif_Interpretacion();
contpos Tif_MuestrasPorPixel();
entero  Tif_FilasPorBanda();
entero  Tif_TamanoBanda();
entero  Tif_Desplazamiento();
entero  Tif_Tamano();
logico  Tif_LeeBandaBN();
logico  Tif_LeeImagenBN();
#define Tif_Fichero(t)  ((t)->Fichero)
#define Tif_PonFichero(t,f)  (((t)->Fichero)=(f))
#define Tif_Formato(t)  ((t)->Formato)
#define Tif_PonFormato(t,f)  (((t)->Formato)=(f))
#define Tif_Directorio(t)  ((t)->Directorio)
#define Tif_PonDirectorio(t,d)  (((t)->Directorio)=(d))
#define Tif_TotalTag(t)  ((t)->TotalTag)
#define Tif_PonTotalTag(t,n)  (((t)->TotalTag)=(n))
#define Tif_TotalBanda(t)  ((t)->TotalBanda)
#define Tif_PonTotalBanda(t,b)  (((t)->TotalBanda)=(b))
#define Tif_ComienzoDir(t)  ((t)->ComienzoDir)
#define Tif_PonComienzoDir(t,c)  (((t)->ComienzoDir)=(c))
#define Tif_MetodoCompr(t)  ((t)->MetodoCompr)
#define Tif_PonMetodoCompr(t,m)  (((t)->MetodoCompr)=(m))
#endif /* _OLIMPO_ */
