12
oldint9_handler : tseginfo;
13
newint9_handler : tseginfo;
16
backupDS : Word; external name '___v2prt0_ds_alias';
18
procedure int9_handler; assembler;
26
movw %cs:backupDS, %ax
29
movw dosmemselector, %ax
37
ljmp %cs:oldint9_handler
39
procedure int9_dummy; begin end;
43
sound(500); delay(10); nosound;
45
procedure clicker_dummy; begin end;
47
procedure install_click;
49
clickproc := @clicker;
50
lock_data(clickproc, sizeof(clickproc));
51
lock_data(dosmemselector, sizeof(dosmemselector));
54
longint(@clicker_dummy) - longint(@clicker));
55
lock_code(@int9_handler,
56
longint(@int9_dummy)-longint(@int9_handler));
57
newint9_handler.offset := @int9_handler;
58
newint9_handler.segment := get_cs;
59
get_pm_interrupt(kbdint, oldint9_handler);
60
set_pm_interrupt(kbdint, newint9_handler);
63
procedure remove_click;
65
set_pm_interrupt(kbdint, oldint9_handler);
66
unlock_data(dosmemselector, sizeof(dosmemselector));
67
unlock_data(clickproc, sizeof(clickproc));
70
longint(@clicker_dummy)-longint(@clicker));
71
unlock_code(@int9_handler,
72
longint(@int9_dummy)-longint(@int9_handler));
80
Writeln('Enter any message. Press return when finished');
81
while (ch <> #13) do begin
82
ch := readkey; write(ch);
b'\\ No newline at end of file'