
  PROCEDURE [INLINE] clp$sort_record_fields
    (VAR field_values {input, output} : array [1 .. * ] of clt$field_value);

?? PUSH (LISTEXT := ON) ??

    VAR
      current: -clc$max_fields .. clc$max_fields,
      gap: clt$field_number,
      start: clt$field_number,
      swap: clt$field_value;


    gap := UPPERBOUND (field_values);
    WHILE gap > 1 DO
      gap := 2 * (gap DIV 4) + 1;
      FOR start := 1 TO UPPERBOUND (field_values) - gap DO
        current := start;
        WHILE (current > 0) AND (field_values [current].
              name > field_values [current + gap].name) DO
          swap := field_values [current];
          field_values [current] := field_values [current + gap];
          field_values [current + gap] := swap;
          current := current - gap;
        WHILEND;
      FOREND;
    WHILEND;

  PROCEND clp$sort_record_fields;

*copyc clt$field_number
*copyc clt$field_value
?? POP ??
