Contributor: J.P KARRELL { >Can anyone give me an idea of how to use a config file in my programs. >Such as an easy one, I am writing a program for my BBS in which this >program will Copy files to another directory. I know I could put the >directory from and to in the code itself, but what I want to accomplish >is to use a Configuration file to read the from directory and to >directory. This is so the program can be used anywhere. Can someone >please help me with this? I posted a unit I wrote a day or so ago which can be modified to do this. Here it is again (extensively modified to support an ASCII configuration file): Notes: Change the CFGKEYS constants to the keywords you want your program to recognize (remember to change the CONFIGOPTIONS constant also). } Unit CFG_DEF; Interface uses Dos; { Dos unit is needed for FindFirst } Const CONFIGFILE = 'YOURFILE.CFG'; CONFIGOPTIONS = 5; CFGKEYS : array[1..CONFIGOPTIONS] of string = ('YOUR', 'CONFIG', 'OPTIONS', 'GO', 'HERE'); Procedure Read_Cfg_File; Implementation {----------------------------------------------} Function Findfile(searchkey : string) : boolean; var srec : searchrec; begin findfirst(searchkey,anyfile, srec); FindFile := (doserror = 0); end; Function Uppercase(st : string) : string; var loop : byte; begin for loop := 1 to length(st) do st[loop] := upcase(st[loop]); uppercase := st; end; Procedure Read_Cfg_File; var f :text; i, j, loop : byte; line, key, command : string; Result_Table : array[1..CONFIGOPTIONS] of boolean; begin fillchar(Result_Table,sizeof(Result_Table),false); command := #0; line := #0; key := #0; {$I-} assign(f,CONFIGFILE); reset(f); {$I+} {CheckError(IOResult,CFGFILE); <--- Add your own error checking here as my CheckError procedure is not included in this snippet. } while not EOF(f) do begin {while} readln(f,line); if (copy(line,1,1) <> #59) and (copy(line,1,1) <> #32) then begin { ignore lines preceeded with a comment delimiter - usually #59 (IE: ';')} j := pos(#32,line); if j = 0 then j := length(line)+1; key := copy(line,1,j-1); delete(line,1,j); i := pos(#59,line); if i = 0 then i := length(line)+1; command := copy(line,1,i-1); i := pos(#32,command); if i <> 0 then delete(command,i,length(command)-(i-1)); for loop := 1 to CONFIGOPTIONS do begin {loop} if Uppercase(key) = CFGKEYS[loop] then begin {if} Result_Table[loop] := true; case loop of {case} 1 : begin end; 2 : begin end; 3 : begin end; 4 : begin end; 5 : begin end; end; {case} end; {if} end; {loop} end; {if} end; {while} close(f); end; {proc} end. {unit}