/*== Typedefs ========================================================*/

typedef unsigned char BYTE;                  /*nos construimos un byte*/
typedef unsigned int WORD;
typedef BYTE BOOL;                            /*como BOOLEAN en Pascal*/

/*== Macros ==========================================================*/

/*-- MK_FP crea de una direcci¢n de segmento y Offset un -------------*/
/*-- puntero FAR a un objeto                                   -------*/

#ifdef MK_FP                                   /*¨ya se defini¢ MK_FP?*/
 #undef MK_FP
#endif
#define MK_FP(seg, ofs) ((void far *) ((unsigned long) (seg)<<16|(ofs)))

/*-- PAGE_ADR devuelve un puntero a la p gina f¡sica X dentro del ----*/
/*-- Page-Frame de la memoria EMS                                 ----*/

#define PAGE_ADR(x) ((void *) MK_FP(ems_frame_seg() + ((x) << 10), 0))

/*== Constantes ======================================================*/

#define TRUE  1                  /*Constantes para el trabajo con BOOL*/
#define FALSE 0

#define EMS_INT 0x67    /*n£mero de interrupci¢n para acceder a la EMM*/
#define EMS_ERR -1                      /*se devuelve en caso de error*/

/*== variables globales===============================================*/

extern BYTE emm_ec;                /*aqu¡ se guardan los c¢digos de error EMM*/


BOOL ems_inst(void);
int ems_num_page(void);
int ems_free_page(void);
WORD ems_frame_seg(void);
int ems_alloc(int pages);
BOOL ems_map(int handle, int logp, BYTE physp);
BOOL ems_free(int handle);
BYTE ems_version(void);
BOOL ems_save_map(int handle);
BOOL ems_restore_map(int handle);
void print_err(void);