=========================================================================== 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)