return i;
}
-/* convert a long to a string (unterminated). returns the number of
+/* convert a scm_t_intmax to a string (unterminated). returns the number of
characters in the result.
rad is output base
p is destination: worst case (base 2) is SCM_INTBUFLEN */
size_t
-scm_iint2str (long num, int rad, char *p)
+scm_iint2str (scm_t_intmax num, int rad, char *p)
+{
+ if (num < 0)
+ {
+ *p++ = '-';
+ return scm_iuint2str (-num, rad, p) + 1;
+ }
+ else
+ return scm_iuint2str (num, rad, p);
+}
+
+/* convert a scm_t_intmax to a string (unterminated). returns the number of
+ characters in the result.
+ rad is output base
+ p is destination: worst case (base 2) is SCM_INTBUFLEN */
+size_t
+scm_iuint2str (scm_t_uintmax num, int rad, char *p)
{
size_t j = 1;
size_t i;
- unsigned long n = (num < 0) ? -num : num;
+ scm_t_uintmax n = num;
for (n /= rad; n > 0; n /= rad)
j++;
i = j;
- if (num < 0)
- {
- *p++ = '-';
- j++;
- n = -num;
- }
- else
- n = num;
+ n = num;
while (i--)
{
int d = n % rad;
#endif /* def FLT_MAX */
-/* SCM_INTBUFLEN is the maximum number of characters neccessary for the
- * printed or scm_string representation of an exact immediate.
+/* SCM_INTBUFLEN is the maximum number of characters neccessary for
+ * the printed or scm_string representation of an scm_t_intmax in
+ * radix 2. The buffer passed to scm_iint2str and scm_iuint2str must
+ * be of this size, for example.
*/
-#define SCM_INTBUFLEN (5 + SCM_LONG_BIT)
+#define SCM_INTBUFLEN (5 + SCM_CHAR_BIT*sizeof(scm_t_intmax))
\f
SCM_API SCM scm_logcount (SCM n);
SCM_API SCM scm_integer_length (SCM n);
-SCM_API size_t scm_iint2str (long num, int rad, char *p);
+SCM_API size_t scm_iint2str (scm_t_intmax num, int rad, char *p);
+SCM_API size_t scm_iuint2str (scm_t_uintmax num, int rad, char *p);
SCM_API SCM scm_number_to_string (SCM x, SCM radix);
SCM_API int scm_print_real (SCM sexp, SCM port, scm_print_state *pstate);
SCM_API int scm_print_complex (SCM sexp, SCM port, scm_print_state *pstate);