. service tells you which device it couldn't stat
[minix3.git] / lib / ack / float / cuf4.fc
blobc022f0e90623cd05bc56c25410c8f2c7e35b2d5b
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 */
6 /* $Header$ */
8 /*
9         CONVERT INTEGER TO SINGLE (CUF n 4)
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.
17 #include "FP_types.h"
19 void
20 cuf4(ss,src)
21 int     ss;     /* source size */
22 long    src;    /* largest possible integer to convert */
24         EXTEND  buf;
25         short   *ipt;
26         SINGLE  *result;
27         long    i_src;
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 *) ((void *) &ss);
40         }
41         if (i_src == 0) {
42                 *result = (SINGLE) 0L;
43                 return;
44         }
45                         /* ESTABLISHED THAT src != 0    */
47                         /* adjust exponent field        */
48         if (ss != sizeof(long))
49                 i_src <<= 16;
51                         /* move to mantissa field       */
52         buf.m1 = i_src;
54                         /* adjust mantissa field        */
55         nrm_ext(&buf);
56         compact(&buf,result,4);