home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / msj / msjv3_1 / lim4 / alter.c next >
Encoding:
C/C++ Source or Header  |  1989-03-02  |  1.7 KB  |  56 lines

  1. /*
  2.  
  3. Figure 9
  4. ========
  5.  
  6. */
  7.  
  8. /******************************************************************/
  9. /* This function implements ALTER PAGE MAP AND CALL  emm function */
  10. /******************************************************************/
  11.  
  12. int map_and_call(new_map_ptr, new_length, old_map_ptr, 
  13.                  old_length, handle)
  14. struct log_phys *new_map_ptr;
  15. char new_length;
  16. struct log_phys *old_map_ptr;
  17. char old_length;
  18. unsigned int handle;
  19. {
  20.   struct map_call_struct {
  21.      unsigned int offset_target_address ;
  22.      unsigned int seg_target_address ;
  23.      char new_page_map_length ;
  24.      unsigned int offset_new_page_map;
  25.      unsigned int seg_new_page_map ;
  26.      char old_page_map_length ;
  27.      unsigned int offset_old_page_map;
  28.      unsigned int seg_old_page_map ;
  29.    } map_call; 
  30.    struct map_call_struct *map_call_ptr;  
  31.  
  32.   map_call_ptr = &map_call ;
  33.   map_call.offset_target_address = 0 ;
  34.   map_call.seg_target_address    =0xd000;
  35.   map_call.new_page_map_length   = new_length;
  36.   map_call.offset_new_page_map   = FP_OFF(new_map_ptr);
  37.   map_call.seg_new_page_map      = FP_SEG(new_map_ptr);
  38.   map_call.old_page_map_length   = old_length;
  39.   map_call.offset_old_page_map   = FP_OFF(old_map_ptr);
  40.   map_call.seg_old_page_map      = FP_SEG(old_map_ptr);
  41.  
  42.   /****************************************************************/
  43.   /* Set up for alter page map and call function                  */
  44.   /****************************************************************/
  45.  
  46.   inregs.h.ah =0x56;
  47.   inregs.h.al = 0;
  48.   inregs.x.dx = handle ;
  49.   map_call_ptr = &map_call ;
  50.   inregs.x.si = FP_OFF(map_call_ptr);
  51.   segregs.ds = FP_SEG(map_call_ptr);
  52.   int86x(EMM_INT,&inregs,&outregs,&segregs);
  53.   if (outregs.h.ah != 0) return(1);
  54.  
  55.   return(0) ;
  56. }