Annotation of 43BSD/contrib/icon/rt/cvint.c, revision 1.1

1.1     ! root        1: #include "../h/rt.h"
        !             2: 
        !             3: /*
        !             4:  * cvint - convert the value represented by d into an integer and write
        !             5:  *  the value into the location referenced by i.  cvint returns one of
        !             6:  *  T_INTEGER, T_LONGINT, and NULL depending on the outcome of the conversion.
        !             7:  */
        !             8: 
        !             9: cvint(d, i)
        !            10: register struct descrip *d;
        !            11: long *i;
        !            12:    {
        !            13:    DclSave
        !            14:    union numeric result;
        !            15: 
        !            16:    /*
        !            17:     * Use cvnum to attempt the conversion into "result".
        !            18:     */
        !            19:    switch (cvnum(d, &result)) {
        !            20:       case T_LONGINT:
        !            21:          /*
        !            22:           * The value converted into an integer.  Assign the value to *i.
        !            23:           *  On systems with longs, distinguish between integer and long
        !            24:           *  integer results via the return value.
        !            25:           */
        !            26:          *i = result.integer;
        !            27: #ifdef LONGS
        !            28:          if (*i < (long)(int)MINSHORT || *i > (long)(int)MAXSHORT)
        !            29:             return (T_LONGINT);
        !            30: #endif LONGS
        !            31:          return (T_INTEGER);
        !            32: 
        !            33:       case T_REAL:
        !            34:          /*
        !            35:           * The value converted into a real number.  If it's not in the
        !            36:           *  range of an integer, return a 0, otherwise convert the
        !            37:           *  real value into an integer.  As before, distinguish between
        !            38:           *  integers and long integers if necessary.
        !            39:           */
        !            40:          if (result.real > MAXLONG || result.real < MINLONG)
        !            41:             return (NULL);
        !            42:          *i = (long)result.real;
        !            43: #ifdef LONGS
        !            44:          if (*i < MINSHORT || *i > MAXSHORT)
        !            45:             return (T_LONGINT);
        !            46: #endif LONGS
        !            47:          return (T_INTEGER);
        !            48: 
        !            49:       default:
        !            50:          return (NULL);
        !            51:       }
        !            52:    }

unix.superglobalmegacorp.com

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