home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1997 October / VPR9710A.ISO / BENCH / DJ1SRC_K / 105 / XMS.H < prev   
C/C++ Source or Header  |  1997-05-02  |  4KB  |  154 lines

  1. /*
  2.    ** xms.h -- C bindings for xms API
  3.    ** Author: Kent Williams william@umaxc.weeg.uiowa.edu
  4.    **
  5.    ** This is an attempt to provide a complete C binding
  6.    ** for the XMS calls.
  7.    **
  8.    ** All calls will store the error code in xms_error.  I have
  9.    ** tried to document how the calls work in this file where their
  10.    ** prototypes are given.
  11.  */
  12. /* 1997/05/01 modified by Kimio Itoh(kitoh@nn.iij4u.or.jp) 
  13.    for reduce binary size and for dead code elimination.
  14.  */
  15. #ifndef __XMS_H
  16. #define __XMS_H
  17.  
  18. /*
  19.    ** extended memory block types
  20.  */
  21. typedef unsigned short emb_size_K_t;
  22. typedef unsigned long emb_off_t;
  23. typedef short emb_handle_t;
  24.  
  25. /*
  26.    ** upper memory block types.
  27.  */
  28. typedef unsigned short umb_segment_t;
  29. typedef unsigned short umb_size_t;
  30.  
  31. /*
  32.    ** structure defining information returned
  33.    ** from xms_query_extended_memory
  34.  */
  35. typedef struct _xms_extended_info {
  36.     emb_size_K_t max_free_block;
  37.     emb_size_K_t total_extended_memory;
  38. } xms_extended_info;
  39.  
  40. /*
  41.    ** structure defining information returned
  42.    ** from xms_get_version_info
  43.  */
  44. typedef struct _xms_version_info {
  45.     unsigned xms_ver;
  46.     unsigned xmm_ver;
  47.     unsigned hma_present;
  48. } xms_version_info;
  49.  
  50. /*
  51.    ** structure defining information returned from
  52.    ** xms_get_emb_handle_info
  53.  */
  54. typedef struct _emb_handle_info {
  55.     unsigned char lock_count;
  56.     unsigned char handles_available;
  57.     emb_size_K_t block_size;
  58. } emb_handle_info;
  59.  
  60. /*
  61.    ** move parameter block for extended memory moves.
  62.  */
  63. typedef struct _xms_move_param {
  64.     emb_off_t length;
  65.     emb_handle_t source_handle;
  66.     emb_off_t source_offset;
  67.     emb_handle_t dest_handle;
  68.     emb_off_t dest_offset;
  69. } xms_move_param;
  70.  
  71. /*
  72.    ** upper memory block info blockblock
  73.  */
  74. typedef struct _umb_info {
  75.     umb_segment_t segment;
  76.     umb_size_t block_size;
  77. } umb_info;
  78.  
  79. /*
  80.    ** xms error codes
  81.  */
  82. #define XMS_NOT_IMPLEMENTED        0x80
  83. #define XMS_VDISK_DETECTED        0x81
  84. #define XMS_A20_ERROR            0x82
  85. #define XMS_DRIVER_ERROR        0x8e
  86. #define XMS_FATAL_DRIVER_ERROR    0x8f
  87. #define XMS_NO_HMA                0x90
  88. #define XMS_HMA_INUSE            0x91
  89. #define XMS_HMA_DX_TOO_SMALL    0x92
  90. #define XMS_HMA_NOT_ALLOCATED    0x93
  91. #define XMS_A20_STILL_ENABLED    0x94
  92. #define XMS_EXT_NO_MEM            0xa0
  93. #define XMS_EXT_NO_HANDLES        0xa1
  94. #define XMS_EXT_BAD_HANDLE        0xa2
  95. #define XMS_EXT_BAD_SRC_HANDLE    0xa3
  96. #define XMS_EXT_BAD_SRC_OFFSET    0xa4
  97. #define XMS_EXT_BAD_DST_HANDLE    0xa5
  98. #define XMS_EXT_BAD_DST_OFFSET    0xa6
  99. #define XMS_EXT_BAD_LENGTH        0xa7
  100. #define XMS_EXT_OVERLAP            0xa8
  101. #define XMS_EXT_PARITY            0xa9
  102. #define XMS_EXT_NOT_LOCKED        0xaa
  103. #define XMS_EXT_LOCKED            0xab
  104. #define XMS_EXT_NO_LOCKS        0xac
  105. #define XMS_EXT_LOCK_FAILED        0xad
  106. #define XMS_UMB_SMALLER_AVAIL    0xb0
  107. #define XMS_UMB_NO_MEM            0xb1
  108. #define XMS_UMB_BAD_SEG            0xb2
  109.  
  110. int xms_installed(void);
  111.  
  112. /*
  113.    ** The following functions diddle the A20 address line.  A20 has to
  114.    ** be enabled in order to address memory > 1Mbyte, i.e. the HMA
  115.    ** You are supposed to use the global functions if you are 'the owner'
  116.    ** of the HMA, the local functions if you are not. You own the HMA
  117.    ** if your call to xms_hma_allocate succeeded.
  118.    ** The distinction between global and local aren't really explained
  119.    ** in the stuff I have;  my inclination would be to try to get the hma
  120.    ** with xms_hma_allocate and then just use the global functions.
  121.  */
  122. /* xms function 05H */
  123. int xms_local_enable_a20(void);
  124. /* xms function 06H */
  125. int xms_local_disable_a20(void);
  126.  
  127. /* xms function 08H
  128.    ** this call returns a pointer to a static info area
  129.  */
  130. xms_extended_info *xms_query_extended_memory(void);
  131.  
  132. /* xms function 09H
  133.    ** returns an emb handle, or -1 if allocation fails
  134.  */
  135. int xms_emb_allocate(emb_size_K_t size);
  136.  
  137. /* xms function 0AH
  138.    ** returns 0 on success non-zero on failure
  139.  */
  140. int xms_emb_free(emb_handle_t handle);
  141.  
  142. /* xms function 0CH
  143.    ** returns 32 bit linear address of emb specified by handle,
  144.    ** 0 otherwise.
  145.  */
  146. emb_off_t xms_lock_emb(emb_handle_t handle);
  147.  
  148. /* xms function 0DH
  149.    ** returns 0 on success non-zero on failure
  150.  */
  151. int xms_unlock_emb(emb_handle_t handle);
  152.  
  153. #endif /* XMS_H */
  154.