/*=====[ 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. *----------------------------------------------------------------------* | : 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 # 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 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 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 */