File:  [CSRG BSD Unix] / 43BSD / contrib / icon / functions / abs.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Tue Apr 24 16:12:55 2018 UTC (8 years, 1 month ago) by root
Branches: MAIN, BSD
CVS tags: HEAD, BSD43
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)

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.