delorie.com/djgpp/doc/libc/libc_432.html   search  
libc.a reference

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

_go32_dpmi_allocate_real_mode_callback_iret

Syntax

 
#include <dpmi.h>

int _go32_dpmi_allocate_real_mode_callback_iret(
        _go32_dpmi_seginfo *info, _go32_dpmi_registers *regs
);

Description

See section DPMI Overview.

This function allocates a "real-mode callback". Fill in the pm_offset field of info and call this function. It will fill in the rm_segment and rm_offset fields. Any time a real-mode program calls the real-mode address, your function gets called. The registers in effect will be stored in regs, which should be a global, and will be passed to your function. Any changes in regs will be reflected back into real mode. A wrapper will be added to your function to simulate the effects of an iret instruction, so this function is useful for trapping real-mode software interrupts (like 0x1b - Ctrl-Break hit).

Return Value

Zero on success, nonzero on failure.

Portability

ANSI/ISO C No
POSIX No

Example

 
_go32_dpmi_registers regs;

my_handler(_go32_dpmi_registers *r)
{
  r->d.eax = 4;
}

setup()
{
  _go32_dpmi_seginfo info;
  _go32_dpmi_seginfo old_vector;
  _go32_dpmi_get_real_mode_interrupt_vector(0x84, &old_vector);
  info.pm_offset = my_handler;
  _go32_dpmi_allocate_real_mode_callback_iret(&info, &regs);
  _go32_dpmi_set_real_mode_interrupt_vector(0x84, &info);
  do_stuff();
  _go32_dpmi_set_real_mode_interrupt_vector(0x84, &old_vector);
  _go32_dpmi_free_real_mode_callback(&info);
}


  webmaster     delorie software   privacy  
  Copyright © 2004     Updated Apr 2004