[Back to TSR SWAG index] [Back to Main SWAG index] [Original]
{
>
> Using TP 7.0 for DOS, I can use the Keep() function to
> make a TSR.
>
> But... How do I get it to Un-TSR, ie. T & DSR?
>
Try this code:
----------------------------------------------------------------------
}
procedure Uninstall;
var
  PrevInstance: Word;
begin
{ This part must get the DSeg value from the resident instance of }
{ your program. If you don't know how to do this, contact me... }
  PrevInstance := GetPrevInstance;
  if PrevInstance = 0 then
    ErrorExit('Can't uninstall: program not found in memory.');
  asm
  mov	ds,PrevInstance	{ we completely switch to resident instance! }
  end;
  ShutDownProgram; 	{ do all necessary cleanup jobs. }
  RestoreVectors;	{ restore all vectors you hooked. }
			{ dangerous, if somebody hooked same vectors }
			{ after you... }
  asm
  mov   es,PrefixSeg
  mov   ah,49h
  int   21h		{ free DOS memory allocated for program }
  mov   es,PrefixSeg
  mov   es,es:[2Ch] 	
  mov   ah,49h
  int   21h		{ free DOS memory allocated for environment }
  mov	ax,seg @Data	{ switch back to this instance }
  mov	ds,ax
  end;
  WriteLn('Program uninstalled.');
  Halt(0);		{ yahoo! }
end;
[Back to TSR SWAG index] [Back to Main SWAG index] [Original]