home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / magazine / msysjour / vol07 / 08 / paging / protmode.h < prev    next >
C/C++ Source or Header  |  1992-12-01  |  2KB  |  77 lines

  1. /* 
  2. PROTMODE.H
  3. from December 1992 Microsoft Systems Journal
  4. Andrew Schulman
  5. */
  6.  
  7. #ifndef DPMI_APP
  8. // the following are missing from some versions of WINDOWS.H
  9. #ifdef __cplusplus
  10. extern "C" {
  11. #endif  
  12.     extern WORD FAR PASCAL AllocSelector(WORD sel);
  13.     extern WORD FAR PASCAL FreeSelector(WORD sel);
  14.     extern WORD FAR PASCAL SetSelectorBase(WORD sel, DWORD base);
  15.     extern WORD FAR PASCAL SetSelectorLimit(WORD sel, DWORD limit);
  16.     extern DWORD FAR PASCAL GetSelectorBase(WORD sel);
  17.     extern DWORD FAR PASCAL GetSelectorLimit(WORD sel);
  18. #ifdef __cplusplus  
  19.     } 
  20. #endif  
  21. #endif
  22.  
  23. extern void fail(char *s);  // app has to define a fail() function
  24.  
  25. #define VCR3D       0x28c2
  26.  
  27. #ifndef MK_FP
  28. #define MK_FP(s, o) \
  29.     ((void far *)(((DWORD)(s)) << 16) + (o))
  30. #endif
  31.  
  32. #pragma pack(1)
  33.  
  34. typedef struct {
  35.     unsigned rpl : 2;
  36.     unsigned ti : 1;
  37.     unsigned index : 13;
  38.     } SELECTOR; 
  39.  
  40. typedef struct {
  41.     unsigned short limit_lo;
  42.     unsigned short base_lo;
  43.     unsigned char base_hi;
  44.     unsigned char rts_lo;
  45.     unsigned char limitrts_hi;
  46.     unsigned char base_xhi;
  47.     } DESCRIPTOR;
  48.  
  49. typedef struct {
  50.     unsigned dir : 10;
  51.     unsigned page : 10;
  52.     unsigned offset : 12;
  53.     } LINADDR;
  54.  
  55. typedef void (far *api_entry)(void);
  56. typedef struct { WORD limit; DWORD base; } GDTR;
  57.  
  58. /* a few global variables */
  59. extern DESCRIPTOR far *gdt;
  60. extern DWORD pagedir_phys;
  61. extern DWORD pagedir_lin;
  62.  
  63. api_entry get_vxd_api(WORD vxd_id);
  64. DWORD get_cr3(void);
  65. DWORD dpmi_phys_to_lin(DWORD phys_addr, DWORD num_bytes);
  66. void far *map_linear(DWORD lin_addr, DWORD num_bytes);
  67. void free_mapped_linear(void far *fp);
  68. DWORD far *get_pagedir(void);
  69. DWORD far *get_pagetab(DWORD far *pagedir, int pagetab_num);
  70. void sgdt(GDTR far *pgdtr);
  71. DESCRIPTOR far *get_gdt(void);
  72. BOOL is_system_seg(DESCRIPTOR far *desc);
  73. DWORD get_base(DESCRIPTOR far *desc);
  74. DWORD get_limit(DESCRIPTOR far *desc);
  75. WORD sldt(void);
  76. DESCRIPTOR far *get_ldt(void);
  77.