 PROCEDURE fdp$validate_name (potential_name: string ( * <=
    osc$max_name_size);
        form_processor: fdt$form_processor;
    VAR validated_name: ost$name;
    VAR name_is_valid: boolean);

   TYPE
      char_set = set of char;

    VAR
      name_size: ost$name_size,
      non_fortran_chars: char_set,
      scan_index: integer;

    CASE form_processor OF

    = fdc$ansi_fortran_processor =
{ An ANSI FORTRAN name must be 1-6 characters. }
{ The first character must be a letter. }
{ Characters 2-6 must be a letter or a digit. }

      name_size := clp$trimmed_string_size (potential_name);
      IF ((name_size < 1) OR (name_size > 6)) THEN
        name_is_valid := FALSE;
        EXIT fdp$validate_name;
       IFEND;

      #scan (clv$letter_char, potential_name (1, 1), scan_index,name_is_valid);
      IF name_is_valid THEN
        #scan (clv$non_letter_or_digit,potential_name (2, name_size - 1),
            scan_index,name_is_valid);
        name_is_valid := NOT name_is_valid;
        #translate (osv$lower_to_upper, potential_name, validated_name);
      IFEND;

    = fdc$cobol_processor =
{ A COBOL name must be 1-30 characters. }
{ The first and last characters cannot be a hypen. }
{ The name must contain at least one letter. }
      name_size := clp$trimmed_string_size (potential_name);
      IF NOT ((name_size > 0) AND (name_size < 31) AND
          (potential_name (1) <> '-') AND
          (potential_name (name_size) <> '-')) THEN
        name_is_valid := FALSE;
        EXIT fdp$validate_name;
      IFEND;

      #scan (clv$non_cobol_name_char, potential_name (1, name_size),
          scan_index, name_is_valid);
      name_is_valid := NOT name_is_valid;
      IF name_is_valid THEN
        #scan (clv$letter_char, potential_name (1, name_size), scan_index, name_is_valid);
        #translate (osv$lower_to_upper, potential_name, validated_name);
      IFEND;

    = fdc$cybil_processor, fdc$scl_processor, fdc$pascal_processor =
      clp$validate_name (potential_name, validated_name, name_is_valid);

    = fdc$CDC_fortran_processor =
{ A CDC FORTRAN name must be 1-7 characters. }
{ The first character must be a letter. }
{ Characters 2-7 must be a letter or a digit. }

      name_size := clp$trimmed_string_size (potential_name);
      IF ((name_size < 1) OR (name_size > 7)) THEN
        name_is_valid := FALSE;
        EXIT fdp$validate_name;
       IFEND;

      #scan (clv$letter_char, potential_name (1, 1), scan_index,name_is_valid);
      IF name_is_valid THEN
        #scan (clv$non_letter_or_digit,potential_name (2, name_size - 1),
            scan_index,name_is_valid);
        name_is_valid := NOT name_is_valid;
        #translate (osv$lower_to_upper, potential_name, validated_name);
      IFEND;

    = fdc$extended_fortran_processor =

{ An extended FORTRAN name must be 1-31 letters, digits, dollar signs, or underscores
{ beginning with a letter.

      #translate (osv$lower_to_upper, potential_name, validated_name);
      #scan (clv$letter_char, potential_name (1, 1), scan_index,name_is_valid);
      IF name_is_valid THEN
        non_fortran_chars := -$char_set ['$', '_', '0', '1', '2', '3', '4', '5',
              '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
              'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U',
              'V', 'W', 'X', 'Y', 'Z',];
        #SCAN (non_fortran_chars, validated_name, scan_index,  name_is_valid);
        name_is_valid := validated_name (scan_index, * ) = '';
      IFEND;

    = fdc$unknown_processor =
      name_size := clp$trimmed_string_size (potential_name);
      IF ((name_size < 1) OR (name_size > osc$max_name_size)) THEN
        name_is_valid := FALSE;
        EXIT fdp$validate_name;
       IFEND;

      #translate (osv$lower_to_upper, potential_name, validated_name);

    ELSE
      name_is_valid := FALSE;
    CASEND;

  PROCEND fdp$validate_name;

?? PUSH (LISTEXT := ON) ??
*copyc clp$trimmed_string_size
*copyc clp$validate_name
*copyc fdt$form_processor
*copyc ost$name
*copyc clv$letter_char
*copyc osv$lower_to_upper
*copyc clv$non_cobol_name_char
*copyc clv$non_letter_or_digit
?? POP ??
