00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #define MAXWIDTH 32
00014
00015 char *
00016 long2str(val, base)
00017 register long val;
00018 register base;
00019 {
00020 static char numbuf[MAXWIDTH];
00021 static char vec[] = "0123456789ABCDEF";
00022 register char *p = &numbuf[MAXWIDTH];
00023 int sign = (base > 0);
00024
00025 *--p = '\0';
00026 if (val) {
00027 if (base > 0) {
00028 if (val < 0L) {
00029 long v1 = -val;
00030 if (v1 == val)
00031 goto overflow;
00032 val = v1;
00033 }
00034 else
00035 sign = 0;
00036 }
00037 else
00038 if (base < 0) {
00039 base = -base;
00040 if (val < 0L) {
00041 register mod, i;
00042 overflow:
00043 mod = 0;
00044 for (i = 0; i < 8 * sizeof val; i++) {
00045 mod <<= 1;
00046 if (val < 0)
00047 mod++;
00048 val <<= 1;
00049 if (mod >= base) {
00050 mod -= base;
00051 val++;
00052 }
00053 }
00054 *--p = vec[mod];
00055 }
00056 }
00057 do {
00058 *--p = vec[(int) (val % base)];
00059 val /= base;
00060 } while (val != 0L);
00061 if (sign)
00062 *--p = '-';
00063 }
00064 else
00065 *--p = '0';
00066 return p;
00067 }