1 /*
2
3 * Copyright (c) 1984, 1985, 1986 AT&T
4 * All Rights Reserved
5
6 * THIS IS UNPUBLISHED PROPRIETARY SOURCE
7 * CODE OF AT&T.
8 * The copyright notice above does not
9 * evidence any actual or intended
10 * publication of such source code.
11
12 */
13 /* @(#)utos.c 1.1 */
14
15 /*
16 * UTOS.C
17 *
18 * Programmer: D. G. Korn
19 *
20 * Date: May 3, 1982
21 *
22 *
23 *
24 * LTOS (SINT, BASE)
25 *
26 * Return a pointer to a string denoting the value of
27 * the signed long integer SINT in base BASE.
28 *
29 * UTOS (USINT, BASE)
30 *
31 * Return a pointer to a string denoting the value of
32 * the unsigned long integer USINT in base BASE.
33 *
34 *
35 *
36 * See Also: arith(III)
37 */
38
39
40 #define BASEMAX (4+16*sizeof(int))
41 static char hexstr[BASEMAX];
42 extern char hdigits[];
43 char *utos();
44 char *ltos();
45
46 /*
47 * LTOS (SINT, BASE)
48 *
49 * long USINT;
50 *
51 * int BASE;
52 *
53 * Return a pointer to a string denoting the value of SINT
54 * in base BASE. The string will be stored within HEXSTR.
55 * It will begin with the base followed by a single '#'.
56 * A minus sign will be prepended for negative numbers
57 *
58 */
59
60
ltos(sint,base)61 char *ltos(sint,base)
62 long sint;
63 int base;
64 {
65 register char *sp;
66 register long l = (sint>=0?sint:-sint);
67 #ifdef pdp11
68 sp = utos(l,base);
69 #else
70 sp = utos((unsigned long)l,base);
71 #endif /* pdp11 */
72 if(sint<0)
73 *--sp = '-';
74 return(sp);
75 }
76
77 /*
78 * UTOS (USINT, BASE)
79 *
80 * unsigned USINT;
81 *
82 * int BASE;
83 *
84 * Return a pointer to a string denoting the value of USINT
85 * in base BASE. The string will be stored within HEXSTR.
86 * It will begin with the base followed by a single '#'.
87 *
88 */
89
90
91
utos(usint,base)92 char *utos(usint,base)
93 register int base;
94 #ifdef pdp11
95 /* unsigned longs are not supported on pdp11 */
96 long usint;
97 {
98 long l = usint;
99 #else
100 unsigned long usint;
101 {
102 register unsigned long l = usint;
103 #endif /* pdp11 */
104 register char *cp = hexstr+(BASEMAX-1);
105 if(base < 2 || base > BASEMAX)
106 return(cp);
107 for(*cp = 0;cp > hexstr && l;l /= base)
108 *--cp = hdigits[(l%base)<<1];
109 if(usint==0)
110 *--cp = '0';
111 if(base==10)
112 return(cp);
113 *--cp = '#';
114 *--cp = hdigits[(base%10)<<1];
115 if(base /= 10)
116 *--cp = hdigits[(base%10)<<1];
117 return(cp);
118 }
119