(*--------------------------------------------------------------------------*)
(*      Get_Config_File_Line --- Get one parameter line from config file    *)
(*--------------------------------------------------------------------------*)

FUNCTION Get_Config_File_Line(  VAR Param_Num:  INTEGER;
                                VAR Param_Str:  AnyStr;
                                VAR Param_Ival: INTEGER;
                                VAR Param_Rval: REAL ) : BOOLEAN;

(*--------------------------------------------------------------------------*)
(*                                                                          *)
(*     Function:  Get_Config_File_Line                                      *)
(*                                                                          *)
(*     Purpose:   Reads and interprets one line of configuration file       *)
(*                                                                          *)
(*     Calling Sequence:                                                    *)
(*                                                                          *)
(*        QGot := Get_Config_File_Line(  VAR Param_Num:  INTEGER;           *)
(*                                       VAR Param_Str:  AnyStr;            *)
(*                                       VAR Param_Ival: INTEGER;           *)
(*                                       VAR Param_Rval: REAL ) : BOOLEAN;  *)
(*                                                                          *)
(*           Param_Num  --- parameter number of this line                   *)
(*           Param_Str  --- string value of parameter                       *)
(*           Param_Ival --- Integer value of parameter                      *)
(*           Param_Rval --- Real value of parameter                         *)
(*                                                                          *)
(*           Qgot       --- TRUE if configuration line returned;            *)
(*                          FALSE if end-of-file encountered on             *)
(*                          configuration file.                             *)
(*                                                                          *)
(*     Calls:  None                                                         *)
(*                                                                          *)
(*--------------------------------------------------------------------------*)

VAR
   I:      INTEGER;
   S:      AnyStr;
   PName:  STRING[2];
   R:      REAL

BEGIN (* Get_Config_File_Line *)
                                   (* Initialize parameter values *)
   Param_Num  := 0;
   Param_Str  := '';
   Param_Ival := 0;
   Param_Rval := 0;

   IF NOT EOF( Config_File ) THEN
      BEGIN

         Get_Config_File_Line := TRUE;

                                   (* Indicate line from configuration file *)
         READLN( Config_File , S );

         S         := S + '    ';
         I         := 0;
         PName     := UpCase( S[1] ) + UpCase( S[2] );
         Param_Str := TrimString( COPY( S, 4, LENGTH( S ) - 3 ) );

                                   (* Search for parameter *)
         REPEAT
            I := I + 1;
         UNTIL ( I > Max_Params ) OR ( PName = Param_Name[I] );

                                   (* If found, convert to numeric if *)
                                   (* appropriate                     *)
         IF I <= Max_Params THEN
            BEGIN
               Param_Num := I;
               FOR I := 1 TO LENGTH( Param_Str ) DO
                  IF Param_Str[I] IN ['0'..'9'] THEN
                     Param_Ival := Param_Ival * 10 + ORD( Param_Str[I] ) -
                                                     ORD( '0' );
               Param_Rval := Param_Ival;
            END;

      END

   ELSE
      Get_Config_File_Line := FALSE;

END   (* Get_Config_File_Line *);
