Metropoli BBS
VIEWER: tcxlmem.h MODE: TEXT (ASCII)
/*=====[ The TesSeRact(TM) CXL User Interface Development System ]======*
 | Copyright (c) 1987-1990, Innovative Data Concepts. All Rights Reserved
 |
 | This Library is part of IDC's TesSeRact Development Tools product
 | line. For information about other IDC products, call 1-215-884-3373.
 *----------------------------------------------------------------------*
 | <TCXLmem.h> : Definitions and prototypes for TCXL memory subsystem.
 *-------------------------------[ Notes ]------------------------------*
 | 1) Refer to the EMS, XMS, VCPI and DPMI specifications for further
 |    information.
 | 2) All pointers used by these functions are FAR pointers.
 *----------------------------------------------------------------------*
 | PGS : $Id: tcxlmem.h 5.51 90/10/01 00:00:00 MLM Release Locker: MLM $
 | $Log:	tcxlmem.h $
 | Revision 5.51  90/10/01  00:00:00  MLM
 | TCXL 5.51
 | 
 *======================================================================*/
#ifndef  _TCXLmem_
#  define   _TCXLmem_   1
#  ifndef   _TCXLdef_
#     include  <TCXLdef.h>
#  endif
                              /*- Memory-flag bits ---------------------*/
#define  MEM_DPMI    0x01     /* DPMI installed */
#define  MEM_VCPI    0x02     /* VCPI installed */
#define  MEM_EMS     0x04     /* EMS installed  */
#define  MEM_XMS     0x08     /* XMS installed  */
#define  MEM_HMA     0x10     /* HMA installed  */

#define  EMS_BadSoft    0x80  /*- EMS error-codes ----------------------*/
#define  EMS_BadHdw     0x81  /* NOTE: Error-codes above 0x8F are for   */
#define  EMS_Busy       0x82  /* EMS 4.0 functions only and are not     */
#define  EMS_BadHandle  0x83  /* supported by this library. See the EMS */
#define  EMS_BadFun     0x84  /* spec for further info.                 */
#define  EMS_NoHandles  0x85  /*----------------------------------------*/
#define  EMS_MapErr     0x86
#define  EMS_NotTotal   0x87
#define  EMS_NotFree    0x88
#define  EMS_NotZero    0x89
#define  EMS_BadPage    0x8A
#define  EMS_BadPhys    0x8B
#define  EMS_SaveFull   0x8C
#define  EMS_SaveDup    0x8D
#define  EMS_NoSave     0x8E
#define  EMS_BadSub     0x8F

#define  XMS_BadFun     0x80  /*- XMS error-codes ----------------------*/
#define  XMS_Vdisk      0x81  /* see the XMS spec for further info.     */
#define  XMS_A20Err     0x82  /*----------------------------------------*/
#define  XMS_DrivErr    0x8E
#define  XMS_Fatal      0x8F
#define  XMS_NoHMA      0x90
#define  XMS_HMABusy    0x91
#define  XMS_HMASmall   0x92
#define  XMS_HMAFree    0x93
#define  XMS_NoXMS      0xA0
#define  XMS_NoHandle   0xA1
#define  XMS_BadHandle  0xA2
#define  XMS_BadSrc     0xA3
#define  XMS_BadSOff    0xA4
#define  XMS_BadDst     0xA5
#define  XMS_BadDOff    0xA6
#define  XMS_BadLen     0xA7
#define  XMS_BadOver    0xA8
#define  XMS_Parity     0xA9
#define  XMS_NotLock    0xAA
#define  XMS_IsLock     0xAB
#define  XMS_LockOvr    0xAC
#define  XMS_LockFail   0xAD
#define  XMS_SmallUMB   0xB0
#define  XMS_NoUMB      0xB1
#define  XMS_BadUMBSeg  0xB2

/*------------------[ Data objects and access macros ]------------------*/

TYP   DwdT     _AdrT;                  /* 32-bit addresses */
TYP   IntT     _HdlT;                  /* EMS/XMS handles */
TYP   struct   _Mem  _MemT;
TYP   WrdT     _SegT, FAR  *_SegFP;    /* segment addresses */
TYP   struct   _Xms  _XmsT, FAR *_XmsFP;

struct _Mem             /* -[ Memory-control object ]----*/
{  BytT  mMflg;         /* 00|00 : Memory flags          */
   BytT  mDpro;         /* 01|01 : DPMI Processor        */
   WrdT  mDflg;         /* 02|02 : DPMI Flags            */
   DwdT  mDent;         /* 04|04 : DPMI entry point      */
   WrdT  mDver;         /* 08|08 : DPMI version          */
   WrdT  mVver;         /* 0A|0A : VCPI Version          */
   WrdT  mEseg;         /* 0C|0C : EMS Base Segment      */
   WrdT  mEver;         /* 0E|0E : EMS Version           */
   WrdT  mEfre;         /* 10|10 : EMS Free (16kb page)  */
   WrdT  mEtot;         /* 12|12 : EMS Total (16kb page) */
   BytT  mEerr;         /* 14|14 : EMS Error Code        */
   BytT  mXerr;         /* 15|15 : XMS Error Code        */
   WrdT  mXver;         /* 16|16 : XMS Version           */
   DwdT  mXent;         /* 18|18 : XMS Entry Point       */
   WrdT  mXint;         /* 1C|1C : XMS Internal Version  */
   WrdT  mHfre;         /* 1E|1E : HMA free (para)       */
   WrdT  mXtot;         /* 20|20 : XMS total free (1k)   */
   WrdT  mXlrg;         /* 22|22 : XMS largest free (1k) */
   WrdT  mUfre;         /* 24|24 : Largest available UMB */
};                      /* 26|26 ]-----------------------*/

GBL   _MemT CDC   _MemCtl;    /*- global memory-control object ---------*/
#define  MemMflg  (_MemCtl.mMflg)               /* Memory Flags         */
#define  MemDPMI  (0 != (MemMflg & MEM_DPMI))   /*    DPMI installed    */
#define  MemVCPI  (0 != (MemMflg & MEM_VCPI))   /*    VCPI installed    */
#define  MemEMS   (0 != (MemMflg & MEM_EMS))    /*    EMS installed     */
#define  MemXMS   (0 != (MemMflg & MEM_XMS))    /*    XMS installed     */
#define  MemHMA   (0 != (MemMflg & MEM_HMA))    /*    HMA installed     */
#define  MemDpro   (_MemCtl.mDpro)              /* DPMI Processor       */
#define  MemD286  (0x02 == MemDpro)             /*    286               */
#define  MemD386  (0x03 == MemDpro)             /*    386               */
#define  MemD486  (0x04 == MemDpro)             /*    486               */
#define  MemDflg  (_MemCtl.mDflg)               /* DPMI Flags           */
#define  MemDf32  (1 = MemDflg)                 /*    32 Bit Support    */
#define  MemDent  (_MemCtl.mDent)               /* DPMI entry point     */
#define  MemDver  (_MemCtl.mDver)               /* DPMI version         */
#define  MemVver  (_MemCtl.mVver)               /* VCPI Version         */
#define  MemEseg  (_MemCtl.mEseg)               /* EMS Base Segment     */
#define  MemEver  (_MemCtl.mEver)               /* EMS Version          */
#define  MemEfre  (_MemCtl.mEfre)               /* EMS Free (16k page)  */
#define  MemEtot  (_MemCtl.mEtot)               /* EMS Total (16k page) */
#define  MemEerr  (_MemCtl.mEerr)               /* EMS Error Code       */
#define  MemXerr  (_MemCtl.mXerr)               /* XMS Error Code       */
#define  MemXver  (_MemCtl.mXver)               /* XMS Version          */
#define  MemXent  (_MemCtl.mXent)               /* XMS Entry Point      */
#define  MemXint  (_MemCtl.mXint)               /* XMS Internal Version */
#define  MemHfre  (_MemCtl.mHfre)               /* HMA free (para)      */
#define  MemXtot  (_MemCtl.mXtot)               /* XMS total free (1k)  */
#define  MemXlrg  (_MemCtl.mXlrg)               /* XMS largest free (1k)*/
#define  MemUfre  (_MemCtl.mUfre)               /* Largest free UMB     */

struct   _Xms           /*-[ XMS Move Struct ]-----*/
{  DwdT     xSlen;      /* 00|00 : Length          */
   _HdlT    xShdl;      /* 04|04 : Source handle   */
   _AdrT    xSptr;      /* 06|06 : Source pointer  */
   _HdlT    xTdhl;      /* 0A|0A : Target handle   */
   _AdrT    xTptr;      /* 0C|0C : Target pointer  */
};                      /* 10|10 ]-----------------*/
#define  XmsSlen(x)  ((x)->xSlen)
#define  XmsShdl(x)  ((x)->xShdl)
#define  XmsSptr(x)  ((x)->xSptr)
#define  XmsTdhl(x)  ((x)->xTdhl)
#define  XmsTptr(x)  ((x)->xTptr)

/*------------------------[ Function Prototypes ]-----------------------*/
#ifdef   __cplusplus
   extern   "C"   {
#endif
                                       /*- EMS functions ---------------*/
_HdlT PAS   EMSalloc(IntT np);         /* allocate pages                */
IntT  PAS   EMSfree(_HdlT eh);         /* free handle's pages           */
ChrFP PAS   EMSgetnam(_HdlT eh,        /* get handle name               */
   ChrFP np);
IntT  PAS   EMScount(NOARG);           /* get handle count              */
IntT  PAS   EMSpages(_HdlT eh);        /* get handle's page count       */
IntT  PAS   EMSmap(_HdlT eh, IntT pp,  /* map physical to logical pages */
   IntT lp);
IntT  PAS   EMSquery(NOARG);           /* get free page count           */
IntT  PAS   EMSrest(_HdlT eh);         /* restore pages                 */
IntT  PAS   EMSsave(_HdlT eh);         /* save pages                    */
IntT  PAS   EMSsetnam(_HdlT eh,        /* set handle name               */
   ChrFP np);
IntT  PAS   EMSstat(NOARG);            /* get EMS status                */
                                       /*- UMB functions ---------------*/
IntT  PAS   UMBalloc(WrdT np,          /* allocate <np> para UMB        */
   _SegFP ps);
IntT  PAS   UMBfree(_SegT ps);         /* free UMB                      */
                                       /*- Memory system ---------------*/
VOID  PAS   MemInit(NOARG);            /* initialize                    */
VOID        MemTerm(NOARG);            /* terminate                     */
                                       /*- XMS A20-line functions ------*/
IntT  PAS   _A20_LD(NOARG);            /* local disable                 */
IntT  PAS   _A20_LE(NOARG);            /* local enable                  */
IntT  PAS   _A20chk(NOARG);            /* check status                  */
IntT  PAS   _A20dis(NOARG);            /* global disable                */
IntT  PAS   _A20ena(NOARG);            /* global enable                 */
                                       /*- XMS HMA functions -----------*/
IntT  PAS   HMAalloc(NOARG);           /* allocate                      */
IntT  PAS   HMAfree(NOARG);            /* free                          */
                                       /*- XMS functions ---------------*/
_HdlT PAS   XMSalloc(WrdT nk);         /* allocate <nk> kb              */
IntT  PAS   XMScopy(_XmsFP xp);        /* copy/move                     */
IntT  PAS   XMSfree(_HdlT xh);         /* free                          */
IntT  PAS   XMSavail(NOARG);           /* get available kb              */
IntT  PAS   XMSquery(_HdlT xh);        /* query handle                  */
_AdrT PAS   XMSlock(_HdlT xh);         /* lock handle                   */
IntT  PAS   XMSrealloc(_HdlT xh,       /* reallocate                    */
   WrdT ns);
IntT  PAS   XMSunlock(_HdlT xh);       /* unlock handle                 */
#  define   MemTerm()
#ifdef   __cplusplus
   }
#endif
#endif   /* _TCXLmem_ : End of <TCXLmem.h> */

[ RETURN TO DIRECTORY ]