set K1 and K2 constants based upon BIPOLAR
SET // if(BIPOLAR=0)
A #BIPOLAR // .
JC EL01 // {
L 0.000000e+000 // K1=0
T #K1 // .
JU EI01 // } else {
EL01: L -2.764800e+004 // K1=-27648.0
T #K1 // .
EI01: NOP 0 &
set K1 and K2 constants based upon BIPOLAR
SET // if(BIPOLAR=0)
A #BIPOLAR // .
JC EL01 // {
L 0.000000e+000 // K1=0
T #K1 // .
JU EI01 // } else {
EL01: L -2.764800e+004 // K1=-27648.0
T #K1 // .
EI01: NOP 0 // }
L 2.764800e+004 // K2=+27648.0
T #K2 // .
// convert input (IN) to real
L #IN // ACC1=IN
ITD // convert to double integer
DTR // convert to real
T #IN_REAL // IN_REAL-IN as a real
// determine SPAN = HI_LIM - LO_LIM
L #HI_LIM // SPAN=HI_LIM-LO_LIM
L #LO_LIM // .
-R // .
T #SPAN // .
// If the input value is outside the K1 and K2 range, the output
// is clamped to the nearer of either the LO_LIM or the HI_LIM
// and an error is logged. If the input value is exactly at a limit the
// output will be set to the computed limit with no error returned.
// changed 2/14/00 by ERI per RQ210693
L #IN_REAL // if(IN_REAL<K1)
L #K1 // .
>=R // .
JC EL02 // {
L 8 // error
T #RET_VAL // .
L #LO_LIM // ACC1=LO_LIM
T #OUT // OUT=ACC1
JU FAIL // error
EL02: POP // } else {
L #K2 // if(IN_REAL>K2)
<=R // .
JC EI04 // {
L 8 // error
T #RET_VAL // .
L #HI_LIM // ACC1=HI_LIM
T #OUT // OUT=ACC1
JU FAIL // error
EI04: NOP 0 // }
NOP 0 // }
// scale the input
L #K2 // TEMP1=K2-K1
L #K1 // .
-R // .
T #TEMP1 // .
L #IN_REAL // IN_REAL-K1
L #K1 // .
-R // .
L #TEMP1 // divide by TEMP1
/R // .
L #SPAN // multiply by SPAN
*R // .
L #LO_LIM // add LO_LIM
+R // .
T #OUT // OUT=scale(IN_REAL)
// set BR bit : no error-set BR bit to 1; with error-set BR bit to 0.
L 0 // return error code 0
T #RET_VAL
SET // RLO = 1 (NO ERROR)
JU SVBR //
FAIL: CLR // RLO = 0 (ERROR)
SVBR: SAVE // BR = RLO