home *** CD-ROM | disk | FTP | other *** search
/ Stars of Shareware: Programmierung / SOURCE.mdf / programm / msdos / c / txcl552 / inc / tcxlmem.h < prev    next >
Encoding:
C/C++ Source or Header  |  1991-03-15  |  11.2 KB  |  201 lines

  1. /*=====[ The TesSeRact(TM) CXL User Interface Development System ]======*
  2.  | Copyright (c) 1987-1991, Innovative Data Concepts, Inc.
  3.  | All Rights Reserved.
  4.  |
  5.  | This Library is part of IDC's TesSeRact Development Tools product
  6.  | line. For information about other IDC products, call  1-215-443-9705.
  7.  *-V--------------------------------------------------------------------*
  8.  | $Header:   tcxlmem.h     552.0   17 Mar 1991 18:26:46  $
  9.  |
  10.  | $Log:   tcxlmem.h    $
  11.  *-D--------------------------------------------------------------------*
  12.  | <TCXLmem.h> : Definitions and prototypes for TCXL memory subsystem.
  13.  *-N-----------------------[ Notes and Caveats ]------------------------*
  14.  | 1) Refer to the EMS, XMS, VCPI and DPMI specifications for further
  15.  |    information.
  16.  | 2) All pointers used by these functions are FAR pointers.
  17.  | 3) _MemInit() and _MemTerm() are internal and MUST not be called by
  18.  |    user code!  Call TcxlInit() to initialize TCXL, not the subsystem
  19.  |    initializers.
  20.  *======================================================================*/
  21. #ifndef  _TCXLmem_
  22. #  define   _TCXLmem_   1              /* Only once!                    */
  23. #  ifndef   _TCXLdef_
  24. #     include  <TCXLdef.h>             /* Standard definitions          */
  25. #  endif
  26.                               /*- MemMflg Memory-flag bits -------------*/
  27. #define  MEM_DPMI    0x01     /* DPMI installed                         */
  28. #define  MEM_VCPI    0x02     /* VCPI installed                         */
  29. #define  MEM_EMS     0x04     /* EMS installed                          */
  30. #define  MEM_XMS     0x08     /* XMS installed                          */
  31. #define  MEM_HMA     0x10     /* HMA installed                          */
  32.  
  33. #define  EMS_BadSoft    0x80  /*- MemEerr EMS error-codes --------------*/
  34. #define  EMS_BadHdw     0x81  /* NOTE: Error-codes above 0x8F are for   */
  35. #define  EMS_Busy       0x82  /* EMS 4.0 functions only and are not     */
  36. #define  EMS_BadHandle  0x83  /* supported by this library. See the EMS */
  37. #define  EMS_BadFun     0x84  /* spec for further info.                 */
  38. #define  EMS_NoHandles  0x85  /*----------------------------------------*/
  39. #define  EMS_MapErr     0x86
  40. #define  EMS_NotTotal   0x87
  41. #define  EMS_NotFree    0x88
  42. #define  EMS_NotZero    0x89
  43. #define  EMS_BadPage    0x8A
  44. #define  EMS_BadPhys    0x8B
  45. #define  EMS_SaveFull   0x8C
  46. #define  EMS_SaveDup    0x8D
  47. #define  EMS_NoSave     0x8E
  48. #define  EMS_BadSub     0x8F
  49.  
  50. #define  XMS_BadFun     0x80  /*- MemXerr XMS error-codes --------------*/
  51. #define  XMS_Vdisk      0x81  /* see the XMS spec for further info.     */
  52. #define  XMS_A20Err     0x82  /*----------------------------------------*/
  53. #define  XMS_DrivErr    0x8E
  54. #define  XMS_Fatal      0x8F
  55. #define  XMS_NoHMA      0x90
  56. #define  XMS_HMABusy    0x91
  57. #define  XMS_HMASmall   0x92
  58. #define  XMS_HMAFree    0x93
  59. #define  XMS_NoXMS      0xA0
  60. #define  XMS_NoHandle   0xA1
  61. #define  XMS_BadHandle  0xA2
  62. #define  XMS_BadSrc     0xA3
  63. #define  XMS_BadSOff    0xA4
  64. #define  XMS_BadDst     0xA5
  65. #define  XMS_BadDOff    0xA6
  66. #define  XMS_BadLen     0xA7
  67. #define  XMS_BadOver    0xA8
  68. #define  XMS_Parity     0xA9
  69. #define  XMS_NotLock    0xAA
  70. #define  XMS_IsLock     0xAB
  71. #define  XMS_LockOvr    0xAC
  72. #define  XMS_LockFail   0xAD
  73. #define  XMS_SmallUMB   0xB0
  74. #define  XMS_NoUMB      0xB1
  75. #define  XMS_BadUMBSeg  0xB2
  76.  
  77. /*------------------[ Data objects and access macros ]------------------*/
  78.  
  79. TYP   DwdT     _AdrT;                  /* 32-bit addresses              */
  80. TYP   IntT     _HdlT;                  /* EMS/XMS handles               */
  81. TYP   struct   _Mem  _MemT;
  82. TYP   WrdT     _SegT, FAR  *_SegFP;    /* segment addresses             */
  83. TYP   struct   _Xms  _XmsT, FAR *_XmsFP;
  84.  
  85. struct _Mem                   /* -[ Memory-control object ]-------------*/
  86. {  BytT  mMflg;               /* 00|00 : MemMflg : Memory flags         */
  87.    BytT  mDpro;               /* 01|01 : MemDpro : DPMI Processor       */
  88.    WrdT  mDflg;               /* 02|02 : MemDflg : DPMI Flags           */
  89.    DwdT  mDent;               /* 04|04 : MemDent : DPMI entry point     */
  90.    WrdT  mDver;               /* 08|08 : MemDver : DPMI version         */
  91.    WrdT  mVver;               /* 0A|0A : MemVver : VCPI Version         */
  92.    WrdT  mEseg;               /* 0C|0C : MemEseg : EMS Base Segment     */
  93.    WrdT  mEver;               /* 0E|0E : MemEver : EMS Version          */
  94.    WrdT  mEfre;               /* 10|10 : MemEfre : EMS Free (16kb page) */
  95.    WrdT  mEtot;               /* 12|12 : MemEtot : EMS Total (16kb page)*/
  96.    BytT  mEerr;               /* 14|14 : MemEerr : EMS Error Code       */
  97.    BytT  mXerr;               /* 15|15 : MemXerr : XMS Error Code       */
  98.    WrdT  mXver;               /* 16|16 : MemXver : XMS Version          */
  99.    DwdT  mXent;               /* 18|18 : MemXent : XMS Entry Point      */
  100.    WrdT  mXint;               /* 1C|1C : MemXint : XMS Internal Version */
  101.    WrdT  mHfre;               /* 1E|1E : MemHfre : HMA free (para)      */
  102.    WrdT  mXtot;               /* 20|20 : MemXtot : XMS total free (1k)  */
  103.    WrdT  mXlrg;               /* 22|22 : MemXlrg : XMS largest free (1k)*/
  104.    WrdT  mUfre;               /* 24|24 : MemUfre : Largest available UMB*/
  105. };                            /* 26|26 ]--------------------------------*/
  106.  
  107. GBL   _MemT CDC   _MemCtl;    /*- global memory-control object ---------*/
  108. #define  MemMflg  (_MemCtl.mMflg)               /* Memory Flags         */
  109. #define  MemDPMI  (0 != (MemMflg & MEM_DPMI))      /* DPMI installed    */
  110. #define  MemVCPI  (0 != (MemMflg & MEM_VCPI))      /* VCPI installed    */
  111. #define  MemEMS   (0 != (MemMflg & MEM_EMS))       /* EMS installed     */
  112. #define  MemXMS   (0 != (MemMflg & MEM_XMS))       /* XMS installed     */
  113. #define  MemHMA   (0 != (MemMflg & MEM_HMA))       /* HMA installed     */
  114. #define  MemDpro   (_MemCtl.mDpro)              /* DPMI Processor       */
  115. #define  MemD286  (0x02 == MemDpro)                /* 286               */
  116. #define  MemD386  (0x03 == MemDpro)                /* 386               */
  117. #define  MemD486  (0x04 == MemDpro)                /* 486               */
  118. #define  MemDflg  (_MemCtl.mDflg)               /* DPMI Flags           */
  119. #define  MemDf32  (1 = MemDflg)                    /* 32 Bit Support    */
  120. #define  MemDent  (_MemCtl.mDent)               /* DPMI entry point     */
  121. #define  MemDver  (_MemCtl.mDver)               /* DPMI version         */
  122. #define  MemVver  (_MemCtl.mVver)               /* VCPI Version         */
  123. #define  MemEseg  (_MemCtl.mEseg)               /* EMS Base Segment     */
  124. #define  MemEver  (_MemCtl.mEver)               /* EMS Version          */
  125. #define  MemEfre  (_MemCtl.mEfre)               /* EMS Free (16k page)  */
  126. #define  MemEtot  (_MemCtl.mEtot)               /* EMS Total (16k page) */
  127. #define  MemEerr  (_MemCtl.mEerr)               /* EMS Error Code       */
  128. #define  MemXerr  (_MemCtl.mXerr)               /* XMS Error Code       */
  129. #define  MemXver  (_MemCtl.mXver)               /* XMS Version          */
  130. #define  MemXent  (_MemCtl.mXent)               /* XMS Entry Point      */
  131. #define  MemXint  (_MemCtl.mXint)               /* XMS Internal Version */
  132. #define  MemHfre  (_MemCtl.mHfre)               /* HMA free (para)      */
  133. #define  MemXtot  (_MemCtl.mXtot)               /* XMS total free (1k)  */
  134. #define  MemXlrg  (_MemCtl.mXlrg)               /* XMS largest free (1k)*/
  135. #define  MemUfre  (_MemCtl.mUfre)               /* Largest free UMB     */
  136.  
  137. struct   _Xms                 /*-[ XMS Move Struct ]--------------------*/
  138. {  DwdT     xSlen;            /* 00|00 : XmsSlen(x) : Length            */
  139.    _HdlT    xShdl;            /* 04|04 : XmsShdl(x) : Source handle     */
  140.    _AdrT    xSptr;            /* 06|06 : XmsSptr(x) : Source pointer    */
  141.    _HdlT    xTdhl;            /* 0A|0A : XmsTdhl(x) : Target handle     */
  142.    _AdrT    xTptr;            /* 0C|0C : XmsTptr(x) : Target pointer    */
  143. };                            /* 10|10 ]--------------------------------*/
  144. #define  XmsSlen(x)  ((x)->xSlen)
  145. #define  XmsShdl(x)  ((x)->xShdl)
  146. #define  XmsSptr(x)  ((x)->xSptr)
  147. #define  XmsTdhl(x)  ((x)->xTdhl)
  148. #define  XmsTptr(x)  ((x)->xTptr)
  149.  
  150. /*------------------------[ Function Prototypes ]-----------------------*/
  151. #ifdef   __cplusplus
  152.    extern   "C"   {                    /* No mangling, please           */
  153. #endif
  154.                                        /*- EMS functions ---------------*/
  155. _HdlT PAS   EMSalloc(IntT np);         /* Allocate pages                */
  156. IntT  PAS   EMSfree(_HdlT eh);         /* Free handle's pages           */
  157. ChrFP PAS   EMSgetnam(_HdlT eh,        /* Get handle name               */
  158.    ChrFP np);
  159. IntT  PAS   EMScount(NOARG);           /* Get handle count              */
  160. IntT  PAS   EMSpages(_HdlT eh);        /* Get handle's page count       */
  161. IntT  PAS   EMSmap(_HdlT eh, IntT pp,  /* Map physical to logical pages */
  162.    IntT lp);
  163. IntT  PAS   EMSquery(NOARG);           /* Get free page count           */
  164. IntT  PAS   EMSrest(_HdlT eh);         /* Restore pages                 */
  165. IntT  PAS   EMSsave(_HdlT eh);         /* Save pages                    */
  166. IntT  PAS   EMSsetnam(_HdlT eh,        /* Set handle name               */
  167.    ChrFP np);
  168. IntT  PAS   EMSstat(NOARG);            /* Get EMS status                */
  169.                                        /*- UMB functions ---------------*/
  170. IntT  PAS   UMBalloc(WrdT np,          /* Allocate <np> para UMB        */
  171.    _SegFP ps);
  172. IntT  PAS   UMBfree(_SegT ps);         /* Free UMB                      */
  173.                                        /*- XMS A20-line functions ------*/
  174. IntT  PAS   _A20_LD(NOARG);            /* Local disable                 */
  175. IntT  PAS   _A20_LE(NOARG);            /* Local enable                  */
  176. IntT  PAS   _A20chk(NOARG);            /* Check status                  */
  177. IntT  PAS   _A20dis(NOARG);            /* Global disable                */
  178. IntT  PAS   _A20ena(NOARG);            /* Global enable                 */
  179.                                        /*- XMS HMA functions -----------*/
  180. IntT  PAS   HMAalloc(NOARG);           /* Allocate                      */
  181. IntT  PAS   HMAfree(NOARG);            /* Free                          */
  182.                                        /*- XMS functions ---------------*/
  183. _HdlT PAS   XMSalloc(WrdT nk);         /* Allocate <nk> kb block        */
  184. IntT  PAS   XMScopy(_XmsFP xp);        /* Copy/move block               */
  185. IntT  PAS   XMSfree(_HdlT xh);         /* Free block                    */
  186. IntT  PAS   XMSavail(NOARG);           /* Get available kb              */
  187. IntT  PAS   XMSquery(_HdlT xh);        /* Query handle                  */
  188. _AdrT PAS   XMSlock(_HdlT xh);         /* Lock handle                   */
  189. IntT  PAS   XMSrealloc(_HdlT xh,       /* Reallocate block              */
  190.    WrdT ns);
  191. IntT  PAS   XMSunlock(_HdlT xh);       /* Unlock handle                 */
  192.                               /*- Internals ----------------------------*/
  193. VOID  PAS   _MemInit(NOARG);
  194. VOID        _MemTerm(NOARG);
  195.                               /*- Implementation macros ----------------*/
  196. #define     _MemTerm()
  197. #ifdef   __cplusplus
  198.    }
  199. #endif
  200. #endif   /*- _TCXLmem_ : End of <TCXLmem.h> ----------------------------*/
  201.