[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]