| Line |   | 
|---|
| 1 | /*
 | 
|---|
| 2 |   (c) copyright 1988 by the Vrije Universiteit, Amsterdam, The Netherlands.
 | 
|---|
| 3 |   See the copyright notice in the ACK home directory, in the file "Copyright".
 | 
|---|
| 4 | */
 | 
|---|
| 5 | 
 | 
|---|
| 6 | /* $Header: /cvsup/minix/src/lib/ack/float/cif4.fc,v 1.1 2005/10/10 15:27:42 beng Exp $ */
 | 
|---|
| 7 | 
 | 
|---|
| 8 | /*
 | 
|---|
| 9 |         CONVERT INTEGER TO SINGLE (CIF n 4)
 | 
|---|
| 10 | 
 | 
|---|
| 11 |         THIS ROUTINE WORKS BY FILLING AN EXTENDED
 | 
|---|
| 12 |         WITH THE INTEGER VALUE IN EXTENDED FORMAT
 | 
|---|
| 13 |         AND USES COMPACT() TO PUT IT INTO THE PROPER
 | 
|---|
| 14 |         FLOATING POINT PRECISION.
 | 
|---|
| 15 | */
 | 
|---|
| 16 | 
 | 
|---|
| 17 | #include "FP_types.h"
 | 
|---|
| 18 | 
 | 
|---|
| 19 | void
 | 
|---|
| 20 | cif4(ss,src)
 | 
|---|
| 21 | int     ss;     /* source size */
 | 
|---|
| 22 | long    src;    /* largest possible integer to convert */
 | 
|---|
| 23 | {
 | 
|---|
| 24 |         EXTEND  buf;
 | 
|---|
| 25 |         short   *ipt;
 | 
|---|
| 26 |         long    i_src;
 | 
|---|
| 27 |         SINGLE  *result;
 | 
|---|
| 28 | 
 | 
|---|
| 29 |         zrf_ext(&buf);
 | 
|---|
| 30 |         if (ss == sizeof(long)) {
 | 
|---|
| 31 |                 buf.exp = 31;
 | 
|---|
| 32 |                 i_src = src;
 | 
|---|
| 33 |                 result = (SINGLE *) &src;
 | 
|---|
| 34 |         }
 | 
|---|
| 35 |         else    {
 | 
|---|
| 36 |                 ipt = (short *) &src;
 | 
|---|
| 37 |                 i_src = (long) *ipt;
 | 
|---|
| 38 |                 buf.exp = 15;
 | 
|---|
| 39 |                 result = (SINGLE *) &ss;
 | 
|---|
| 40 |         }
 | 
|---|
| 41 |         if (i_src == 0) {
 | 
|---|
| 42 |                 *result = (SINGLE) 0L;
 | 
|---|
| 43 |                 return;
 | 
|---|
| 44 |         }
 | 
|---|
| 45 |                         /* ESTABLISHED THAT src != 0    */
 | 
|---|
| 46 |                         /* adjust exponent field        */
 | 
|---|
| 47 |         buf.sign = (i_src < 0) ? 0x8000 : 0;
 | 
|---|
| 48 |                         /* clear sign bit of integer    */
 | 
|---|
| 49 |                         /* move to mantissa field       */
 | 
|---|
| 50 |         buf.m1 = (i_src < 0) ? -i_src : i_src;
 | 
|---|
| 51 |                         /* adjust mantissa field        */
 | 
|---|
| 52 |         if (ss != sizeof(long))
 | 
|---|
| 53 |                 buf.m1 <<= 16;
 | 
|---|
| 54 |         nrm_ext(&buf);          /* adjust mantissa field        */
 | 
|---|
| 55 |         compact(&buf, result,sizeof(SINGLE));   /* put on stack */
 | 
|---|
| 56 | }
 | 
|---|
       
      
  Note:
 See   
TracBrowser
 for help on using the repository browser.