program Instances;
{ uploaded by Ron Aaron as a demonstration of how to
  prevent multiple instances of a program in different
  VMs.  This program will work compiled for Windows, DOS
  or DPMI.
}
uses  strings,
{$IFDEF WINDOWS}
        wincrt
{$ELSE}
       crt
{$ENDIF}
;

var
   { Inter Program Area: 16 bytes set aside by IBM for
     just this sort of thing...
   }
   IPA : array[0..15] of char absolute $40:$f0;

const
   ident : PChar = 'INSTTEST';

function isrunning : boolean;
begin
     if StrComp(IPA, ident) = 0 then
        isrunning := true
     else
        isrunning := false;
end;

procedure install;
begin
     StrCopy(IPA, ident);
end;

procedure deinstall;
begin
     StrCopy(IPA,'xxxxx');
end;

begin
     if isrunning then
     begin
          writeln('Previous copy is running.');
     end
     else
     begin
          install;
          writeln('No previous copy is running.  Press any key to quit...');
          while not keypressed do
                ;
          deinstall;
     end;
end.