/************************************************************************\ * File : XMS.h * ************************************************************************** * Fonctions de gestion de la m‚moire ‚tendue en C et ASM. * * * * Ecrit pour le Reporter no4 * * * * Copyright (c) 1994 J‚r“me Stolfo (UltimaN) * * * * Bas‚ sur le document : * * "eXtended Memory Specification (XMS), ver 3.00", by Microsoft(r), * * Lotus(r), Intel(r), AST(r) Research. * \************************************************************************/ #ifndef _XMS_H_ #define _XMS_H_ /* Structure pour les transferts de blocs de m‚moire */ struct XMSMoveStruct { unsigned long Length; /* longueur du bloc … transf‚rer */ unsigned int SourceHandle; /* no du handle … d‚placer (0 : RAM) */ unsigned long SourceOffset; /* offset dans le handle (ou pointeur sur la zone si on d‚place … partir de la RAM */ unsigned int DestHandle; /* Comme pour la source, mais pour le bloc destination */ unsigned long DestOffset; }; /********************************************/ /* Initialisation de la librairie et du */ /* driver. */ /* */ /* Parametres : aucun */ /* Retour : 1 succŠs */ /* 0 erreur (voir UXMSGetError()) */ /********************************************/ extern int XMSInit(); /********************************************/ /* Retourne la derniŠre erreur */ /* */ /* ParamŠtres : aucun */ /* Retour : num‚ro de l'erreur (0: OK) */ /********************************************/ extern int XMSGetError(); /********************************************/ /* Remet … 0 l'erreur aprŠs traitement */ /* */ /* ParamŠtres : aucun */ /* Retour : aucun */ /********************************************/ extern void XMSResetError(); /********************************************/ /* Retourne la version de driver XMS */ /* */ /* ParamŠtres : aucun */ /* Retour : int (hi byte : num‚ro :3) */ /* (lo byte : no de r‚v. :00)*/ /********************************************/ extern int XMSGetVersion(); /********************************************/ /* Retourne des informations sur la m‚moire */ /* libre. */ /* */ /* ParamŠtres : Retour : bloc le plus grand */ /* m‚moire libre */ /********************************************/ extern void XMSGetFreeMem( unsigned far *largest, unsigned far *freemem); /********************************************/ /* Alloue de la m‚moire ‚tendue */ /* */ /* ParamŠtres : taile du bloc en Ko */ /* retour : handle du bloc */ /* Retour : 1 succŠs */ /* 0 erreur */ /********************************************/ extern int XMSAllocate( unsigned size, unsigned far *handle); /********************************************/ /* R‚alloue de la m‚moire ‚tendue */ /* */ /* ParamŠtres : taille du bloc en Ko */ /* out: handle du bloc */ /* Retour : 1 succŠs */ /* 0 erreur */ /********************************************/ extern int XMSRealloc( unsigned size, unsigned handle); /********************************************/ /* LibŠre un handle */ /* */ /* ParamŠtres : handle du bloc … lib‚rer */ /* Retour : 1 succŠs */ /* 0 erreur */ /********************************************/ extern int XMSFree( unsigned handle); /********************************************/ /* TransfŠre un bloc (XMS<->XMS ou XMS<->RAM*/ /* */ /* ParamŠtres : structure XMSMoveStruct */ /* Retour : 1 succŠs */ /* 0 erreur */ /********************************************/ extern int XMSMove( struct XMSMoveStruct far *); /********************************************/ /* Verrouille un bloc en XMS (pour qu'il */ /* ne bouge pas) */ /* */ /* ParamŠtres: handle … v‚rouiller */ /* out: adresse 32-bit du bloc */ /* Retour : 1 succŠs */ /* 0 erreur */ /********************************************/ extern int XMSLock( unsigned handle, void far *address); /********************************************/ /* D‚verouille le bloc */ /* */ /* ParamŠtres : handle ud bloc … d‚verrouil.*/ /* Retour : 1 succŠs */ /* 0 erreur */ /********************************************/ extern int XMSUnlock( unsigned handle); /********************************************/ /* Retourne des infos sur un bloc */ /* */ /* ParamŠtres : handle … inspecter */ /* retour : verrouillage */ /* Nb de handle libres */ /* Taille du bloc en Ko */ /* Retour : 1 succŠs */ /* 0 erreur */ /********************************************/ extern int XMSGetInfo( unsigned handle, unsigned char far *lock, unsigned char far *freehandles, unsigned far *freemem); #endif