118 lines
2.9 KiB
HTML
118 lines
2.9 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
|
||
|
||
<html>
|
||
|
||
<head>
|
||
<meta http-equiv="Content-Type"
|
||
content="text-html; charset=Windows-1252">
|
||
<title>INT 23 - Control-Break Exit Address</title>
|
||
<meta name="FORMATTER" content="Microsoft FrontPage 2.0">
|
||
</head>
|
||
|
||
<body>
|
||
|
||
<h1><a name="kap_interrupt_2820"></a>INT 23 - Control-Break Exit
|
||
Address</h1>
|
||
|
||
<p> no input data</p>
|
||
|
||
<p> - not an interrupt but a pointer to a routine that is called
|
||
when a</p>
|
||
|
||
<p> DOS function detects a ~Ctrl-Break~ or Ctrl-C has been
|
||
pressed</p>
|
||
|
||
<p> resulting in a "Break condition"</p>
|
||
|
||
<p> - a Break condition is detected if DOS's internal Break flag
|
||
is</p>
|
||
|
||
<p> found set by ~INT 1B~ or the next word in the BIOS keyboard
|
||
buffer</p>
|
||
|
||
<p> is a scan code representing one of the Break key
|
||
combinations.</p>
|
||
|
||
<p> If a matching scan code is found, the keyboard buffer head
|
||
pointer</p>
|
||
|
||
<p> is incremented by 2 (which effectively removes the ^C
|
||
keycode), the</p>
|
||
|
||
<p> ^C is printed and then INT 23 is called.</p>
|
||
|
||
<p> - disabling the abort is easy, but to disable the ^C from
|
||
appearing</p>
|
||
|
||
<p> you must either not use any of the DOS I/O functions that
|
||
check</p>
|
||
|
||
<p> for Break or you must trap the Ctrl-C keypress from within
|
||
INT 9.</p>
|
||
|
||
<p> Another method is to scan the BIOS keyboard buffer and delete
|
||
any</p>
|
||
|
||
<p> Break key combinations.</p>
|
||
|
||
<p> - Ctrl-Break empties the keyboard buffer by resetting the
|
||
keyboard</p>
|
||
|
||
<p> head and tail pointers then places a 0000h at the queue head.
|
||
It</p>
|
||
|
||
<p> then sets an internal "Break" flag. DOS
|
||
subfunctions that check</p>
|
||
|
||
<p> for Break see this and then issue INT 23h. DOS does not
|
||
detect</p>
|
||
|
||
<p> INT 1B using the keyboard buffer, but uses it's own internal
|
||
flag.</p>
|
||
|
||
<p> - Alt-Keypad-3 and Ctrl-2 also result in this interrupt</p>
|
||
|
||
<p> - Ctrl-C places 2E03h in the BIOS keyboard buffer while
|
||
Ctrl-2</p>
|
||
|
||
<p> places 0300h and Alt-Keypad-3 places 0003h; none of these key</p>
|
||
|
||
<p> combinations empty the keyboard like Ctrl-Break but all
|
||
result</p>
|
||
|
||
<p> in a ^C being displayed; note that all three produce scan
|
||
codes</p>
|
||
|
||
<p> containing '03'</p>
|
||
|
||
<p> - since DOS checks only the first word of the keyboard buffer</p>
|
||
|
||
<p> Ctrl-C, Ctrl-2 and Alt-Keypad-3 are only detected if they are
|
||
the</p>
|
||
|
||
<p> first word in the buffer while Ctrl-Break is detected via the</p>
|
||
|
||
<p> internal flag and takes effect as soon as it's detected.</p>
|
||
|
||
<p> - do not execute this interrupt directly</p>
|
||
|
||
<p> - see also ~INT 9~</p>
|
||
|
||
<hr>
|
||
|
||
<table border="0" width="100%" cols="3">
|
||
<tr>
|
||
<td width="33%">Zur<EFBFBD>ck zum <a href="inte1at0.htm">Interrupt
|
||
Info</a>. </td>
|
||
<td align="center" width="33%"><a
|
||
href="mailto:Roger.Morgan@htl-steyr.ac.at">Roger Morgan</a>
|
||
/ 1998 </td>
|
||
<td align="right" width="33%"><font size="1">L.<2E>nderung <!--webbot
|
||
bot="Timestamp" s-type="EDITED" s-format="%d.%m.%y"
|
||
startspan -->29.03.99<!--webbot bot="Timestamp" endspan
|
||
i-checksum="13964" --> </font></td>
|
||
</tr>
|
||
</table>
|
||
</body>
|
||
</html>
|