
  PROCEDURE [INLINE] clp$layout_data_line
*IF NOT $true(osv$unix)
    (    local_file_name: amt$local_file_name;
*ELSE
    (    local_file_name: fst$path;
*IFEND
         transfer_count: amt$transfer_count,
         line_layout: clt$line_layout;
         line_area: ^SEQ ( * );
     VAR line: ^clt$command_line;
     VAR line_identifier: clt$line_identifier;
     VAR status: ost$status);

?? PUSH (LISTEXT := ON) ??

    VAR
      line_area_ptr: ^SEQ ( * ),
      remaining_count: amt$transfer_count,
      element_size: clt$line_element_size,
      text_ptr: ^clt$command_line,
      line_number_ptr: ^string ( * <= amc$max_line_number),
      statement_identifier_ptr: ^string ( * <= amc$max_statement_id_length),
      first_space: boolean,
      j: 1 .. clc$max_line_element_size,
      i: 1 .. 3;

    status.normal := TRUE;
    line_area_ptr := line_area;
    RESET line_area_ptr;

    remaining_count := transfer_count;
    text_ptr := NIL;
    line_number_ptr := NIL;
    statement_identifier_ptr := NIL;

  /extract_line_elements/
    FOR i := 1 TO 3 DO
      IF remaining_count <= 0 THEN
        EXIT /extract_line_elements/;
      IFEND;
      element_size := line_layout.element [i].size;
      IF remaining_count < element_size THEN
        element_size := remaining_count;
      IFEND;
      CASE line_layout.element [i].kind OF
      = clc$null_line_element =
        EXIT /extract_line_elements/;
      = clc$text_line_element =
        NEXT text_ptr: [element_size] IN line_area_ptr;
      = clc$line_number_line_element =
        NEXT line_number_ptr: [element_size] IN line_area_ptr;
      = clc$statement_id_line_element =
        NEXT statement_identifier_ptr: [element_size] IN line_area_ptr;
      CASEND;
      remaining_count := remaining_count - element_size;
    FOREND /extract_line_elements/;

    IF text_ptr = NIL THEN
      RESET line_area_ptr;
      NEXT line: [0] IN line_area_ptr;
    ELSE
      element_size := STRLENGTH (text_ptr^);
      WHILE (element_size > 0) AND (text_ptr^ (element_size) = ' ') DO
        element_size := element_size - 1;
      WHILEND;
      IF element_size > clc$max_command_line_size THEN
*IF NOT $true(osv$unix)
        osp$set_status_abnormal ('CL', cle$line_too_long, local_file_name,
              status);
*ELSE
        osp$set_status_abnormal ('CL', cle$line_too_long, '', status);
        osp$append_status_file (osc$status_parameter_delimiter, local_file_name,
              status);
*IFEND
        RETURN;
      IFEND;
      line := ^text_ptr^ (1, element_size);
    IFEND;

    line_identifier.line_number_size := 0;
    IF line_number_ptr <> NIL THEN
      FOR j := 1 TO STRLENGTH (line_number_ptr^) DO
        CASE line_number_ptr^ (j) OF
        = '!' .. '~' =
          line_identifier.line_number_size :=
                line_identifier.line_number_size + 1;
          line_identifier.line_number (line_identifier.line_number_size) :=
                line_number_ptr^ (j);
        = ' ' =
          ;
        ELSE
          line_identifier.line_number_size :=
                line_identifier.line_number_size + 1;
          line_identifier.line_number (line_identifier.line_number_size) :=
                '?';
        CASEND;
      FOREND;
    IFEND;

    line_identifier.statement_identifier_size := 0;
    IF statement_identifier_ptr <> NIL THEN
      first_space := TRUE;
      FOR j := 1 TO STRLENGTH (statement_identifier_ptr^) DO
        CASE statement_identifier_ptr^ (j) OF
        = '!' .. '~' =
          line_identifier.statement_identifier_size :=
                line_identifier.statement_identifier_size + 1;
          line_identifier.statement_identifier
                (line_identifier.statement_identifier_size) :=
                statement_identifier_ptr^ (j);
        = ' ' =
          IF first_space THEN
            line_identifier.statement_identifier_size :=
                  line_identifier.statement_identifier_size + 1;
            line_identifier.statement_identifier
                  (line_identifier.statement_identifier_size) := '.';
            first_space := FALSE;
          IFEND;
        ELSE
          line_identifier.statement_identifier_size :=
                line_identifier.statement_identifier_size + 1;
          line_identifier.statement_identifier
                (line_identifier.statement_identifier_size) := '?';
        CASEND;
      FOREND;
    IFEND;

  PROCEND clp$layout_data_line;
*copyc amt$file_byte_address
*IF NOT $true(osv$unix)
*copyc amt$local_file_name
*ELSE
*copyc fst$path
*IFEND
*copyc amt$transfer_count
*copyc cle$ecc_command_processing
*copyc clt$command_line
*copyc clt$line_identifier
*copyc clt$line_layout
*copyc ost$status
?? POP ??
*IF $true(osv$unix)
*copyc osp$append_status_file
*IFEND
*copyc osp$set_status_abnormal
