Annotation of 43BSD/ingres/source/dbu/convert.c, revision 1.1

1.1     ! root        1: # include      <ingres.h>
        !             2: # include      <symbol.h>
        !             3: # include      <sccs.h>
        !             4: 
        !             5: SCCSID(@(#)convert.c   8.2     1/16/85)
        !             6: 
        !             7: /*
        !             8: **     convert  converts  numeric values of one type and length
        !             9: **     to a different type and length.
        !            10: **
        !            11: **     The source numeric can be i1,i2,i4,f4,or f8.
        !            12: **     The source number will be converted to the
        !            13: **     type and length specified in the destination.
        !            14: **     It also  must be one of i1,i2,i4,f4, or f8.
        !            15: **
        !            16: **     convert returns 0 is no overflow occured,
        !            17: **       else it returns -1
        !            18: */
        !            19: 
        !            20: convert(inp, outp, sf, slen, df, dlen)
        !            21: char   *inp;   /* pointer to input */
        !            22: char   *outp;  /* pointer to the output area */
        !            23: int    sf;     /* format of the source number */
        !            24: int    slen;   /* length of the source number */
        !            25: int    df;     /* format of the dest */
        !            26: int    dlen;   /* length of the dest */
        !            27: {
        !            28:        union anytype   number;
        !            29:        register union anytype  *num;
        !            30:        register int    sl;
        !            31:        register int    dl;
        !            32: 
        !            33:        dl = dlen;
        !            34:        sl = slen;
        !            35:        num = &number;
        !            36:        bmove(inp, num, sl);    /* copy number into buffer */
        !            37: 
        !            38:        if (sf != df)
        !            39:        {
        !            40:                /* if the source and destination formats are
        !            41:                   different then the source must be converted
        !            42:                   to i4 if the dest is int, otherwise to f8 */
        !            43: 
        !            44:                if (df == FLOAT)
        !            45:                {
        !            46:                        switch (sl)
        !            47:                        {
        !            48: 
        !            49:                          case 1:
        !            50:                                num->f8type = num->i1type;      /* i1 to f8 */
        !            51:                                break;
        !            52: 
        !            53:                          case 2:
        !            54:                                num->f8type = num->i2type;      /* i2 to f8 */
        !            55:                                break;
        !            56: 
        !            57:                          case 4:
        !            58:                                num->f8type = num->i4type;      /* i4 to f8 */
        !            59:                        }
        !            60:                sl = 8;
        !            61:                }
        !            62:                else
        !            63:                {
        !            64:                        /* check if float >  2**31 */
        !            65:                        if (sl == 8)
        !            66:                                num->f4type = num->f8type;      /* f8 to f4 */
        !            67: 
        !            68:                        if (num->f4type > MAXF4 | num->f4type < MINF4 )
        !            69:                                return (-1);
        !            70:                        num->i4type = num->f4type;      /* f4 to i4 */
        !            71:                        sl = 4;
        !            72:                }
        !            73:        }
        !            74: 
        !            75:        /* source is now the same type as destination */
        !            76:        /* convert lengths to match */
        !            77: 
        !            78:        if (sl != dl)
        !            79:        {
        !            80:                /* lengths don't match. convert. */
        !            81:                if (df == FLOAT)
        !            82:                {
        !            83:                        if (dl == 8)
        !            84:                                num->f8type = num->f4type;      /* f4 to f8 */
        !            85:                        else
        !            86:                                num->f4type = num->f8type;      /* f8 to f4 with rounding */
        !            87:                }
        !            88:                else
        !            89:                {
        !            90:                        switch (dl)
        !            91:                        {
        !            92: 
        !            93:                          case 1:
        !            94:                                if (sl == 2)
        !            95:                                {
        !            96:                                        if (num->i2type > MAXI2 | num->i2type < MINI2)
        !            97:                                                return (-1);
        !            98:                                        num->i1type = num->i2type;      /* i2 to i1 */
        !            99:                                }
        !           100:                                else
        !           101:                                {
        !           102:                                        if (num->i4type > MAXI2 | num->i4type < MINI2)
        !           103:                                                return (-1);
        !           104:                                        num->i1type = num->i4type;      /* i4 to i1 */
        !           105:                                }
        !           106:                                break;
        !           107: 
        !           108:                          case 2:
        !           109:                                if (sl == 1)
        !           110:                                {
        !           111:                                        num->i2type = num->i1type;      /* i1 to i2 */
        !           112:                                }
        !           113:                                else
        !           114:                                {
        !           115:                                        if (num->i4type > MAXI4 | num->i4type < MINI4)
        !           116:                                                return (-1);
        !           117:                                        num->i2type = num->i4type;      /* i4 to i2 */
        !           118:                                }
        !           119:                                break;
        !           120: 
        !           121:                          case 4:
        !           122:                                if (sl == 1)
        !           123:                                        num->i4type = num->i1type;      /* i1 to i4 */
        !           124:                                else
        !           125:                                        num->i4type = num->i2type;      /* i2 to i4 */
        !           126:                        }
        !           127:                }
        !           128:        }
        !           129: 
        !           130:        /* conversion is complete */
        !           131:        /* copy the result into outp */
        !           132: 
        !           133:        bmove(num, outp, dl);
        !           134:        return (0);
        !           135: }

unix.superglobalmegacorp.com

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