?? RIGHT := 110 ??
?? NEWTITLE := 'NOS/VE SCL Interpreter : LONGREAL Constants' ??
MODULE clm$longreal_constants;

{
{ PURPOSE:
{   This module contains declarations for certain real number values.  This is
{   necessary because of CYBIL's incomplete support of the LONGREAL data type.
{

?? NEWTITLE := 'Global Declarations', EJECT ??
*copyc clt$longreal
?? PUSH (LISTEXT := ON) ??
*copyc oss$job_paged_literal
?? POP ??
?? TITLE := 'Initialization of "constants"', EJECT ??

  VAR
*IF NOT $true(osv$unix)
    max_integer_as_real: [STATIC, READ, oss$job_paged_literal] clt$longreal :=
          [3, [[403f(16), 0ffffffffffff(16)], [403f(16), 0fffe00000000(16)]]],
    max_real: [STATIC, READ, oss$job_paged_literal] clt$longreal :=
          [3, [[4fff(16), 0ffffffffffff(16)], [4fff(16), 0ffffffffffff(16)]]],
    min_integer_as_real: [STATIC, READ, oss$job_paged_literal] clt$longreal :=
          [3, [[0c040(16), 800000000000(16)], [0c040(16), 0(16)]]],
    min_real: [STATIC, READ, oss$job_paged_literal] clt$longreal :=
          [3, [[0cfff(16), 0ffffffffffff(16)], [0cfff(16), 0ffffffffffff(16)]]],
    negative_infinity: [STATIC, READ, oss$job_paged_literal] clt$longreal :=
          [3, [[0d000(16), 0], [0d000(16), 0]]],
    positive_infinity: [STATIC, READ, oss$job_paged_literal] clt$longreal :=
          [3, [[5000(16), 0], [5000(16), 0]]],
*ELSE
    max_integer_as_real: [STATIC, READ, oss$job_paged_literal] clt$longreal :=
          [3, [0, 41d(16), 3ffffff(16), 3c00(16)]],
    max_real: [STATIC, READ, oss$job_paged_literal] clt$longreal :=
          [3, [0, 7fe(16), 3ffffff(16), 3ffffff(16)]],
    min_integer_as_real: [STATIC, READ, oss$job_paged_literal] clt$longreal :=
          [3, [1, 41e(16), 0, 0]],
    min_real: [STATIC, READ, oss$job_paged_literal] clt$longreal :=
          [3, [1, 7fe(16), 3ffffff(16), 3ffffff(16)]],
    negative_infinity: [STATIC, READ, oss$job_paged_literal] clt$longreal :=
          [3, [1, 7ff(16), 0, 0]],
    positive_infinity: [STATIC, READ, oss$job_paged_literal] clt$longreal :=
          [3, [0, 7ff(16), 0, 0]],

*IFEND
    real_one: [STATIC, READ, oss$job_paged_literal] longreal := 1.0d0,
    real_zero: [STATIC, READ, oss$job_paged_literal] longreal := 0.0d0;

?? TITLE := 'Pointers to "constants"', EJECT ??

  VAR
    clv$max_integer_as_real: [XDCL, READ, oss$job_paged_literal] ^longreal := ^max_integer_as_real.long_real;

  VAR
    clv$max_real: [XDCL, READ, oss$job_paged_literal] ^longreal := ^max_real.long_real;

  VAR
    clv$min_integer_as_real: [XDCL, READ, oss$job_paged_literal] ^longreal := ^min_integer_as_real.long_real;

  VAR
    clv$min_real: [XDCL, READ, oss$job_paged_literal] ^longreal := ^min_real.long_real;

  VAR
    clv$negative_infinity: [XDCL, READ, oss$job_paged_literal] ^longreal := ^negative_infinity.long_real;

  VAR
    clv$positive_infinity: [XDCL, READ, oss$job_paged_literal] ^longreal := ^positive_infinity.long_real;

  VAR
    clv$real_one: [XDCL, READ, oss$job_paged_literal] ^longreal := ^real_one;

  VAR
    clv$real_zero: [XDCL, READ, oss$job_paged_literal] ^longreal := ^real_zero;

MODEND clm$longreal_constants;
