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