(* :Could someone please tell me how to disable CTRL-BREAK/C in my program so the :user cannot exit without using my "exit" option? The DOS BREAK=OFF just The mother of all TP FAQs :-) -From: garbo.uwasa.fi:/pc/ts/tsfaqp20.zip Frequently Asked TP Questions -Subject: Disabling or capturing the break key 1. ***** Q: I don't want the Break key to be able to interrupt my TP programs. How is this done? Q2: I want to be able to capture the Break key in my TP program. How is this done? Q3: How do I detect if a certain key has been pressed? A: This very frequently asked question is basically a case of RTFM (read the f*ing manual). But this feature is, admittedly, not very prominently displayed in the Turbo Pascal reference. (As a general rule we should not use the newsgroups as a replacement for our possibly missing manuals, but enough of this line.) There is a CheckBreak variable in the Crt unit, which is true by default. To turn it off use uses Crt; : CheckBreak := false; : Besides turning off break checking this enables you to capture the pressing of the break key as you would capture pressing ctrl-c. In other words you can use e.g. : procedure TEST; var key : char; begin repeat if KeyPressed then begin key := ReadKey; case key of #3 : begin writeln ('Break'); exit; end; {ctrl-c or break} else write (ord(key), ' '); end; {case} end; {if} until false; end; : IMPORTANT: Don't test the ctrl-break feature just from within the TP IDE, because it has ctlr-break handler ("intercepter") of its own and may confuse you into thinking that ctrl-break cannot be circumvented by the method given above. The above example has a double purpose. It also shows the rudiments how you can detect if a certain key has been pressed. This enables you to give input without echoing it to the screen, which is a later FAQ in this collection. This is, however, not all there can be to break checking, since the capturing is possible only at input time. It is also possible to write a break handler to interrupt a TP program at any time. For more details see Ohlsen & Stoker, Turbo Pascal Advanced Techniques, Chapter 7. (For the bibliography, see FAQPASB.TXT in this same FAQ collection). A2: Here is an example code for disabling Ctrl-Break and Ctrl-C with interrupts *) uses Dos; var OldIntr1B : pointer; { Ctrl-Break address } OldIntr23 : pointer; { Ctrl-C interrupt handler } answer : string; { For readln test } {$F+} procedure NewIntr1B (flags,cs,ip,ax,bx,cx,dx,si,di,ds,es,bp : word); Interrupt; {$F-} begin end; {$F+} procedure NewIntr23 (flags,cs,ip,ax,bx,cx,dx,si,di,ds,es,bp : word); Interrupt; {$F-} begin end; begin GetIntVec ($1B, OldIntr1B); SetIntVec ($1B, @NewIntr1B); { Disable Ctrl-Break } GetIntVec ($23, OldIntr23); SetIntVec ($23, @NewIntr23); { Disable Ctrl-C } writeln ('Try breaking, disabled'); readln (answer); SetIntVec ($1B, OldIntr1B); { Enable Ctrl-Break } SetIntVec ($23, OldIntr23); { Enable Ctrl-C } writeln ('Try breaking, enabled'); readln (answer); writeln ('Done'); end.