[Back to INTERRUP SWAG index]  [Back to Main SWAG index]  [Original]

 {***************************************************************************}
 {                                                                           }
 {   NoBoot  -  The simplest way of disabling CTRL-ALT-DEL.  Freeware.       }
 {              Simply add this unit to an USES clause of your program       }
 {              and forget it.  Its way of operating is fully automatic!     }
 {              A minimal demo is at the end of this unit.                   }
 {                                                                           }
 {   Author: Pino Navato                                                     }
 {                                                                           }
 {   E-Mail: pnavato@poboxes.com                                             }
 {           pnavato@geocities.com                                           }
 {           Pino Navato, 2:335/225.18  (The Bits BBS, Fidonet)              }
 {                                                                           }
 {   WWW:    www.poboxes.com/pnavato                                         }
 {           (currently forwards to  www.geocities.com/SiliconValley/4421)   }
 {                                                                           }
 {   Advertisement:                                                          }
 {     Do you need new CHR fonts for the BGI?  Visit my home page!           }
 {                                                                           }
 {***************************************************************************}


Unit NoBoot;

interface

  { This unit doesn't export anything! }


implementation
uses Dos;

var OldInt9     : Procedure;
    OldExitProc : pointer;


procedure ExitHandler; far;
begin
   ExitProc := OldExitProc;
   SetIntVec($9,Addr(OldInt9))   { Restore the old vector }
end;


procedure NewInt9; interrupt;
begin
   if (Port[$60] = 83) and ( (mem[$40:$17] and $0C) = $0C ) then
      port[$20] := $20      { Signal End Of Interrupt }
   else
      begin
         inline ($9C);   { PUSHF - Push flags }
         OldInt9         { Call the old INT 9 }
      end
end;


begin  { Initialization }
   GetIntVec($9, @OldInt9);
   SetIntVec($9, Addr(NewInt9));   { Insert NewInt9 into the keyboard chain }
   OldExitProc := ExitProc;
   ExitProc := @ExitHandler
end.

{ ========================================================================== }


Program NoBoot_Test;

uses NoBoot;

begin
   readln     { Ctrl-Alt-Del has no effect now }
end.

{ It couldn't be easier! }

[Back to INTERRUP SWAG index]  [Back to Main SWAG index]  [Original]