Contributor: MARTIN RICHARDSON        

{*****************************************************************************
 * Function ...... ParseCount()
 * Purpose ....... To count the number of tokens in a string
 * Parameters .... cString      String to count tokens in
 *                 cChar        Token separator
 * Returns ....... Number of tokens in 
 * Notes ......... Uses function StripChar
 * Author ........ Martin Richardson
 * Date .......... September 30, 1992
 *****************************************************************************}
FUNCTION ParseCount( cString: STRING; cChar: CHAR ): INTEGER;
BEGIN
     ParseCount := LENGTH(cString) - LENGTH(StripChar(cString, cChar)) + 1;
END;

{*****************************************************************************
 * Function ...... Parse()
 * Purpose ....... To parse out tokens from a string
 * Parameters .... cString      String to parse
 *                 nIndex       Token number to return
 *                 cChar        Token separator
 * Returns ....... Token  extracted from 
 * Notes ......... If  is greater than the number of tokens in
 *                  then a null string is returned.
 *               . Uses function Left, Right, and ParseCount
 * Author ........ Martin Richardson
 * Date .......... September 30, 1992
 *****************************************************************************}
FUNCTION Parse( cString: STRING; nIndex: INTEGER; cChar: CHAR ): STRING;
VAR 
   i: INTEGER;
   cResult: STRING;
BEGIN
     IF nIndex > ParseCount( cString, cChar ) THEN
        cResult := ''
     ELSE BEGIN
          cString := cString + cChar;
          FOR i := 1 TO nIndex DO BEGIN
              cResult := Left( cString, POS( cChar, cString ) - 1 );
              cString := Right(cString, LENGTH(cString) - POS(cChar, cString));
          END { Next I };
     END { IF };
     Parse := cResult;
END;