
  FUNCTION [INLINE] clp$longreal_classify
    (    real_number: longreal): clt$real_number_class;

?? PUSH (LISTEXT := ON) ??

    VAR
*IF NOT $true(osv$unix)
      breakdown: clt$longreal_breakdown,
      check: 0 .. 0f(16);
*ELSE
      breakdown: clt$longreal_breakdown;
*IFEND


    #UNCHECKED_CONVERSION (real_number, breakdown);

*IF $true(osv$unix)

    IF breakdown.exponent = 0 THEN
      clp$longreal_classify := clc$real_zero;
    ELSEIF breakdown.exponent = UPPERVALUE (breakdown.exponent) THEN
      IF (breakdown.fraction_1 = 0) AND
            (breakdown.fraction_2 = 0) THEN
        IF breakdown.sign = 0 THEN
          clp$longreal_classify := clc$real_positive_infinite;
        ELSE
          clp$longreal_classify := clc$real_negative_standard;
        IFEND;
      ELSE
        clp$longreal_classify := clc$real_indefinite;
      IFEND;
    ELSEIF breakdown.sign = 0 THEN
      clp$longreal_classify := clc$real_positive_standard;
    ELSE
      clp$longreal_classify := clc$real_negative_standard;
    IFEND;

*ELSE

    check := breakdown.first.exponent DIV 1000(16);

    CASE check OF
    = 0(16) .. 2(16), 8(16) .. 0a(16) =
      clp$longreal_classify := clc$real_zero;
    = 3(16) .. 4(16) =
      clp$longreal_classify := clc$real_positive_standard;
    = 0b(16) .. 0c(16) =
      clp$longreal_classify := clc$real_negative_standard;
    = 5(16) .. 6(16) =
      clp$longreal_classify := clc$real_positive_infinite;
    = 0d(16) .. 0e(16) =
      clp$longreal_classify := clc$real_negative_infinite;
    = 7(16), 0f(16) =
      clp$longreal_classify := clc$real_indefinite;
    CASEND;

*IFEND

  FUNCEND clp$longreal_classify;

*copyc clt$longreal_breakdown
*copyc clt$real_number_class
?? POP ??
