Rev | Line | |
---|
[9] | 1 | /* $Header: /cvsup/minix/src/commands/aal/long2str.c,v 1.1.1.1 2005/04/21 14:53:57 beng Exp $ */
|
---|
| 2 | /*
|
---|
| 3 | * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
|
---|
| 4 | * See the copyright notice in the ACK home directory, in the file "Copyright".
|
---|
| 5 | */
|
---|
| 6 | /* Integer to String translator
|
---|
| 7 | -> base is a value from [-16,-2] V [2,16]
|
---|
| 8 | -> base < 0: see 'val' as unsigned value
|
---|
| 9 | -> no checks for buffer overflow and illegal parameters
|
---|
| 10 | (1985, EHB)
|
---|
| 11 | */
|
---|
| 12 |
|
---|
| 13 | #define MAXWIDTH 32
|
---|
| 14 |
|
---|
| 15 | char *
|
---|
| 16 | long2str(val, base)
|
---|
| 17 | register long val;
|
---|
| 18 | register base;
|
---|
| 19 | {
|
---|
| 20 | static char numbuf[MAXWIDTH];
|
---|
| 21 | static char vec[] = "0123456789ABCDEF";
|
---|
| 22 | register char *p = &numbuf[MAXWIDTH];
|
---|
| 23 | int sign = (base > 0);
|
---|
| 24 |
|
---|
| 25 | *--p = '\0'; /* null-terminate string */
|
---|
| 26 | if (val) {
|
---|
| 27 | if (base > 0) {
|
---|
| 28 | if (val < 0L) {
|
---|
| 29 | long v1 = -val;
|
---|
| 30 | if (v1 == val)
|
---|
| 31 | goto overflow;
|
---|
| 32 | val = v1;
|
---|
| 33 | }
|
---|
| 34 | else
|
---|
| 35 | sign = 0;
|
---|
| 36 | }
|
---|
| 37 | else
|
---|
| 38 | if (base < 0) { /* unsigned */
|
---|
| 39 | base = -base;
|
---|
| 40 | if (val < 0L) { /* taken from Amoeba src */
|
---|
| 41 | register mod, i;
|
---|
| 42 | overflow:
|
---|
| 43 | mod = 0;
|
---|
| 44 | for (i = 0; i < 8 * sizeof val; i++) {
|
---|
| 45 | mod <<= 1;
|
---|
| 46 | if (val < 0)
|
---|
| 47 | mod++;
|
---|
| 48 | val <<= 1;
|
---|
| 49 | if (mod >= base) {
|
---|
| 50 | mod -= base;
|
---|
| 51 | val++;
|
---|
| 52 | }
|
---|
| 53 | }
|
---|
| 54 | *--p = vec[mod];
|
---|
| 55 | }
|
---|
| 56 | }
|
---|
| 57 | do {
|
---|
| 58 | *--p = vec[(int) (val % base)];
|
---|
| 59 | val /= base;
|
---|
| 60 | } while (val != 0L);
|
---|
| 61 | if (sign)
|
---|
| 62 | *--p = '-'; /* don't forget it !! */
|
---|
| 63 | }
|
---|
| 64 | else
|
---|
| 65 | *--p = '0'; /* just a simple 0 */
|
---|
| 66 | return p;
|
---|
| 67 | }
|
---|
Note:
See
TracBrowser
for help on using the repository browser.