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

    {
     >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}

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