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

    ===========================================================================
     BBS: Canada Remote Systems
    Date: 06-30-93 (07:05)             Number: 28694
    From: ROB GREEN                    Refer#: NONE
      To: RAND NOWELL                   Recvd: NO
    Subj: CODE FOR PROGRAM               Conf: (1221) F-PASCAL
    ---------------------------------------------------------------------------
     > Another way would be to, upon program startup, is create an
     > enviornment var refering to your program. Say the program is
     > RR.EXE, create a var as Set RR = INSTALLED!  then when you
     > shell, search the enviornment for RR, if it equals INSTALLED!
     > then present message, if the RR var not exists, then load the
     > program.  Of course when the program quits you want to seet RR =
     >    (nothing).....

    Heres the way i do it...

    unit AmLoaded;

    interface

    type
       ICAType   = record
           Stext : string[13];
           chksum: integer;
       end;

    var
      ica : icaType absolute $0000:$04f0;

    Procedure PutICA(sText:string);

    procedure GetIca(var stext:string);

    function  IcaSame(Stext:string):boolean;

    implementation

    Procedure PutICA(sText:string);
    var
       j:byte;
    Begin
       fillchar(ica.stext,sizeof(ica.stext),0);
       ica.stext:=copy(stext,1,13);
       ica.stext[0]:=#13;
       Ica.ChkSum:=0;
       for j:=0 to 13 do
          Ica.ChkSum:=Ica.ChkSum+ord(ica.stext[j]);
    End;

    Procedure GetIca(var stext:string);
    Begin
       stext:=ica.stext;
    End;

    function  IcaSame:boolean;
    var
       j:byte;
       k,m:integer;
    begin
       k:=0;
       m:=0;
       for j:=0 to 13 do
       Begin
          k:=k+ord(ica.stext[j]);
          m:=m+ord(stext[j]);
       end;
       if k=m then
       Begin
          if ica.chksum=m then
             IcaSame:=true
          else
             IcaSame:=False;
       end
       else
          icasame:=false;
    end;

    end.
    -----------------------
    Test program:

    uses AmLoaded;
    Begin
       PutIca('ATEST');
       Writeln('ATEST, should come back as same');
       {Check to see if we can read it back without changing anything}
       If IcaSame('ATEST') then
          writeln('Same')
       else
          writeln('Not Same');
       PutICA('Another Test');
       Writeln('Another Test, should come back as not same');
       {Change the lower case 'h' into an uppercase 'H'}
       Ica.Stext[5]:='H';
       If IcaSame('Another Test') then
          writeln('Same')
       else
          writeln('Not same');
       PutIca('hello world');
       writeln('Hello world, should come back as not same');
       {Change the chksum}
       ica.chksum:=111;
       If IcaSame('hello world'); then
          writeln('Same')
       else
          writeln('Not same');
    End.
    -------------------------------------------

    Before doing EXEC do this:
    PutICA('Program name');  {up to 13 chars}
    EXEC(getenv('COMSPEC'),'Whatever');
    PutIca('            ');  {Or null}

    Then when starting your program do this:
    If ICASame('Program name') then
       writeln('Can''t load Program name on top of itself');

    Rob

    --- FMail 0.94
     * Origin: The Rush Room - We OWN Orlando - (407) 678 & 0749 (1:363/166)

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