| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
#include <dpmi.h>
int _go32_dpmi_allocate_real_mode_callback_iret(
_go32_dpmi_seginfo *info, _go32_dpmi_registers *regs
);
|
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).
Zero on success, nonzero on failure.
| ANSI/ISO C | No |
| POSIX | No |
_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, ®s);
_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);
}
|