[Back to TSR SWAG index] [Back to Main SWAG index] [Original]
{$A+,B-,D-,E-,F-,I-,L-,N-,O-,R-,S-,V-}
{$M 1024,0,0}
Uses Dos,
clock; { My clock ISR Unit in next message. }
Const
IRet : Word = $cf;
IDStr : String[13]='TeeCee''s Clock';
Var
p : Pointer;
begin
GetIntVec($66,p); { Int 66h is reserved For user defined interrupts }
inc(LongInt(p),2);
if String(p^) = IDStr then begin
Writeln('TeeCee''s clock is already installed - you must be blind!');
halt;
end
else begin
Writeln('TeeCee''s clock is now installed For demo purposes only');
SetIntVec($66,@IRet); { IRet is obviously not an interrupt! }
{ What we are actually doing is storing a Pointer to the IDStr }
{ in the vector table - much like the way the Video font addresses }
{ are stored. }
SwapVectors;
Keep(0);
end;
end.
(See the next message For the Unit Clock. )
Now that is definintely For demonstration purposes only! It will work but has
several serious shortcomings!
Firstly, it hooks the user defined interrupt $66 to allow any subsequent
executions to determine if the Program is already installed. It does this
without making any checks as to whether or not something else already "owns"
this vector. Not very smart!
Secondly, it provides no means to uninstall itself. Mmmmm... :-(
Thirdly, Graphics mode will cause problems. Again - not terribly smart!
Finally, TSRs are not For the faint-of-heart or beginner. They are an
extraordinarily complex and difficult part of Dos Programming and if you are
serious about getting into TSRs then get as many good books as you can find
that authoritively discuss the subject. Buying a good commercial toolbox, such
as Turbo Power's "TSRs Made Easy" is another smart move, as studying how the
masters do it is one of the best ways to learn.
[Back to TSR SWAG index] [Back to Main SWAG index] [Original]