GNAT: The GNU New York University Ada Translator

By Gavin Smyth

Dr. Dobb's Journal December 1997

Dpmi_Error: exception;  -- Thrown if there is a system problem
Start_Of_Locked_Code, End_Of_Locked_Code: Unsigned_Char;
pragma Import( Asm, Start_Of_Locked_Code, "start_of_locked_code" );
pragma Import( Asm, End_Of_Locked_Code, "end_of_locked_code" );
Code: aliased Dpmi_Mem_Info;
 ...
Dpmi_Get_Segment_Base_Address( My_Cs, Code.Address );
Code.Address := Code.Address + To_Long( Start_Of_Locked_Code'Address );
Code.Size := To_Long( End_Of_Locked_Code'Address ) -
             To_Long( Start_Of_Locked_Code'Address );
if( Dpmi_Lock_Linear_Region( Code'access ) /= 0 ) then
  raise Dpmi_Error;
end if;

Example 4: Locking the keyboard-interrupt code area.

Back to Article


Copyright © 1997, Dr. Dobb's Journal