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