|
|
BSD 4.3
#include "../h/rt.h"
/*
* abs(x) - absolute value of x.
*/
Xabs(nargs, arg1, arg0)
int nargs;
struct descrip arg1, arg0;
{
union numeric result;
switch (cvnum(&arg1, &result)) {
/*
* If x is convertible to a numeric, turn arg0 into
* a descriptor for the appropriate type and value. If the
* conversion fails, produce an error. This code assumes that
* x = -x is always valid, but this assumption does not always
* hold.
*/
case T_LONGINT:
if (result.integer < 0L)
result.integer = -result.integer;
mkint(result.integer, &arg0);
break;
case T_REAL:
if (result.real < 0.0)
result.real = -result.real;
mkreal(result.real, &arg0);
break;
default:
runerr(102, &arg1);
}
}
Procblock(abs,1)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.