3926 OBJ newString = nil; |
3930 OBJ newString = nil; |
3927 INT myValue; |
3931 INT myValue; |
3928 int negative = 0; |
3932 int negative = 0; |
3929 |
3933 |
3930 if (self == __MKSMALLINT(0)) { |
3934 if (self == __MKSMALLINT(0)) { |
3931 RETURN (@global(ZeroString)); |
3935 RETURN (@global(ZeroString)); |
3932 // RETURN (__MKSTRING_L("0", 1)); |
3936 // RETURN (__MKSTRING_L("0", 1)); |
3933 } |
3937 } |
3934 myValue = __intVal(self); |
3938 myValue = __intVal(self); |
3935 if (myValue < 0) { |
3939 if (myValue < 0) { |
3936 negative = 1; |
3940 negative = 1; |
3937 myValue = -myValue; |
3941 myValue = -myValue; |
3938 } |
3942 } |
3939 cp = buffer + sizeof(buffer) - 1; |
3943 cp = buffer + sizeof(buffer) - 1; |
3940 *cp-- = '\0'; |
3944 *cp-- = '\0'; |
3941 for ( ; myValue != 0; cp--) { |
3945 for ( ; myValue != 0; cp--) { |
3942 *cp = '0' + (myValue % 10); |
3946 *cp = '0' + (myValue % 10); |
3943 myValue /= 10; |
3947 myValue /= 10; |
3944 } |
3948 } |
3945 if (negative) { |
3949 if (negative) { |
3946 *cp-- = '-'; |
3950 *cp-- = '-'; |
3947 } |
3951 } |
3948 newString = __MKSTRING_L(cp+1, (buffer + sizeof(buffer) - 2 - cp)); |
3952 newString = __MKSTRING_L(cp+1, (buffer + sizeof(buffer) - 2 - cp)); |
3949 if (newString != nil) { |
3953 if (newString != nil) { |
3950 RETURN (newString); |
3954 RETURN (newString); |
3951 } |
3955 } |
3952 #endif /* not __SCHTEAM__ */ |
3956 #endif /* not __SCHTEAM__ */ |
3953 %}. |
3957 %}. |
3954 "/ only arrive here, |
3958 "/ only arrive here, |
3955 "/ when having memory problems (i.e. no space for string) ... |
3959 "/ when having memory problems (i.e. no space for string) ... |
3979 int __base = base.intValue(); |
3983 int __base = base.intValue(); |
3980 long myValue = self.longValue(); |
3984 long myValue = self.longValue(); |
3981 java.lang.String __s; |
3985 java.lang.String __s; |
3982 |
3986 |
3983 switch (__base) { |
3987 switch (__base) { |
3984 case 2: |
3988 case 2: |
3985 __s = java.lang.Long.toBinaryString(myValue); |
3989 __s = java.lang.Long.toBinaryString(myValue); |
3986 break; |
3990 break; |
3987 |
3991 |
3988 case 8: |
3992 case 8: |
3989 __s = java.lang.Long.toOctalString(myValue); |
3993 __s = java.lang.Long.toOctalString(myValue); |
3990 break; |
3994 break; |
3991 |
3995 |
3992 case 10: |
3996 case 10: |
3993 __s = java.lang.Long.toString(myValue); |
3997 __s = java.lang.Long.toString(myValue); |
3994 break; |
3998 break; |
3995 |
3999 |
3996 case 16: |
4000 case 16: |
3997 __s = java.lang.Long.toHexString(myValue); |
4001 __s = java.lang.Long.toHexString(myValue); |
3998 break; |
4002 break; |
3999 |
4003 |
4000 default: |
4004 default: |
4001 { |
4005 { |
4002 boolean negative = false; |
4006 boolean negative = false; |
4003 __s = ""; |
4007 __s = ""; |
4004 |
4008 |
4005 if ((__base > 36) || (__base < 2)) { |
4009 if ((__base > 36) || (__base < 2)) { |
4006 throw new SmalltalkError("invalid base: ", base); |
4010 throw new SmalltalkError("invalid base: ", base); |
4007 } |
4011 } |
4008 if (myValue < 0) { |
4012 if (myValue < 0) { |
4009 negative = true; |
4013 negative = true; |
4010 myValue = -myValue; |
4014 myValue = -myValue; |
4011 } |
4015 } |
4012 while (myValue != 0) { |
4016 while (myValue != 0) { |
4013 int digit; |
4017 int digit; |
4014 char ch; |
4018 char ch; |
4015 |
4019 |
4016 digit = (int)(myValue % __base); |
4020 digit = (int)(myValue % __base); |
4017 if (digit <= 9) { |
4021 if (digit <= 9) { |
4018 ch = (char)('0' + digit); |
4022 ch = (char)('0' + digit); |
4019 } else { |
4023 } else { |
4020 ch = (char)('A' + digit - 10); |
4024 ch = (char)('A' + digit - 10); |
4021 } |
4025 } |
4022 __s = ch + __s; |
4026 __s = ch + __s; |
4023 myValue = myValue / __base; |
4027 myValue = myValue / __base; |
4024 } |
4028 } |
4025 if (negative) { |
4029 if (negative) { |
4026 __s = "-" + __s; |
4030 __s = "-" + __s; |
4027 } |
4031 } |
4028 break; |
4032 break; |
4029 } |
4033 } |
4030 } |
4034 } |
4031 return context._RETURN( new STString( __s )); |
4035 return context._RETURN( new STString( __s )); |
4032 #else |
4036 #else |
4033 static char digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; |
4037 static char digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; |
4034 INT __base; |
4038 INT __base; |
4035 |
4039 |
4036 if (__isSmallInteger(base)) { |
4040 if (__isSmallInteger(base)) { |
4037 if (self == __MKSMALLINT(0)) { |
4041 if (self == __MKSMALLINT(0)) { |
4038 RETURN (@global(ZeroString)); |
4042 RETURN (@global(ZeroString)); |
4039 // RETURN (__MKSTRING_L("0", 1)); |
4043 // RETURN (__MKSTRING_L("0", 1)); |
4040 } |
4044 } |
4041 __base = __intVal(base); |
4045 __base = __intVal(base); |
4042 |
4046 |
4043 if ((__base < sizeof(digits)) && (__base > 1)) { |
4047 if ((__base < sizeof(digits)) && (__base > 1)) { |
4044 char buffer[64+3]; /* for 64bit machines, base 2, plus sign, plus 0-byte */ |
4048 char buffer[64+3]; /* for 64bit machines, base 2, plus sign, plus 0-byte */ |
4045 char *cp; |
4049 char *cp; |
4046 OBJ newString; |
4050 OBJ newString; |
4047 int negative = 0; |
4051 int negative = 0; |
4048 INT myValue = __intVal(self); |
4052 INT myValue = __intVal(self); |
4049 |
4053 |
4050 if (myValue < 0) { |
4054 if (myValue < 0) { |
4051 negative = 1; |
4055 negative = 1; |
4052 myValue = -myValue; |
4056 myValue = -myValue; |
4053 } |
4057 } |
4054 cp = buffer + sizeof(buffer) - 1; |
4058 cp = buffer + sizeof(buffer) - 1; |
4055 *cp-- = '\0'; |
4059 *cp-- = '\0'; |
4056 for (; myValue != 0; cp--) { |
4060 for (; myValue != 0; cp--) { |
4057 *cp = digits[myValue % __base]; |
4061 *cp = digits[myValue % __base]; |
4058 myValue /= __base; |
4062 myValue /= __base; |
4059 } |
4063 } |
4060 if (negative) { |
4064 if (negative) { |
4061 *cp-- = '-'; |
4065 *cp-- = '-'; |
4062 } |
4066 } |
4063 newString = __MKSTRING_L(cp+1, (buffer + sizeof(buffer) - 2 - cp)); |
4067 newString = __MKSTRING_L(cp+1, (buffer + sizeof(buffer) - 2 - cp)); |
4064 if (newString != nil) { |
4068 if (newString != nil) { |
4065 RETURN (newString); |
4069 RETURN (newString); |
4066 } |
4070 } |
4067 } |
4071 } |
4068 } |
4072 } |
4069 #endif /* not __SCHTEAM__ */ |
4073 #endif /* not __SCHTEAM__ */ |
4070 %}. |
4074 %}. |
4071 "/ arrive here, for bad base, |
4075 "/ arrive here, for bad base, |
4072 "/ or when having memory problems (i.e. no space for string) ... |
4076 "/ or when having memory problems (i.e. no space for string) ... |