/* global variables */
+int _ibase = 10;
+int _obase = 10;
+
#define DEFAULT_FORMAT "=> %.6g\n"
-char *format = NULL;
-char *minform = NULL;
+char *_format = NULL;
+#define DEFAULT_MINFORM "%.6g"
+char *_minform = NULL;
+
+int _precision = 6;
+
+#define DEFAULT_PROMPT "=> "
+char *_prompt = NULL;
/* print function */
-void set_format (char *prompt, int precision)
+void set_precision (int precision)
+{
+ _precision = precision;
+}
+
+int get_precision ()
+{
+ return _precision;
+}
+
+void set_prompt (char *prompt)
+{
+ if (_prompt) {
+ free (_prompt);
+ }
+ _prompt = strdup (prompt);
+}
+
+void set_format ()
{
char buffer[128] = {0};
- free_format ();
- sprintf (buffer, "%s%%.%dg\n", prompt, precision);
- format = strdup (buffer);
- sprintf (buffer, "%%.%dg", precision);
- minform = strdup (buffer);
+ sprintf (buffer, "%s%%.%dg\n", _prompt ? _prompt : DEFAULT_PROMPT, _precision);
+ if (_format) {
+ free (_format);
+ }
+ _format = strdup (buffer);
+ sprintf (buffer, "%%.%dg", _precision);
+ if (_minform) {
+ free (_minform);
+ }
+ _minform = strdup (buffer);
}
void free_format ()
{
- if (format) {
- free (format);
- format = NULL;
+ if (_format) {
+ free (_format);
+ _format = NULL;
}
- if (minform) {
- free (minform);
- minform = NULL;
+ if (_minform) {
+ free (_minform);
+ _minform = NULL;
+ }
+ if (_prompt) {
+ free (_prompt);
+ _prompt = NULL;
}
}
+void set_base (int in, int out)
+{
+ _ibase = in;
+ _obase = out;
+}
+
+char *show_base ()
+{
+ static char str[16] = {0};
+ sprintf (str, "%d/%d", _ibase, _obase);
+ return str;
+}
+
+int get_ibase ()
+{
+ return _ibase;
+}
+
+/* multi base integer to ascii function */
+
+char *mbitoa (unsigned long value)
+{
+ static char str[8 * sizeof (long) + 1];
+
+ /* decompose */
+ char buffer[8 * sizeof (long) + 1] = {0};
+ int size = 0;
+ do {
+ char x = value % _obase;
+ buffer[size++] = (x > 9) ? 'a' + x - 10 : '0' + x;
+ value /= _obase;
+ } while (value != 0);
+
+ /* revert */
+ int i;
+ for (i = 0; i < size; i++) {
+ str[i] = buffer [size - i - 1];
+ }
+ str[size] = '\0';
+
+ return str;
+}
+
double print (double value)
{
- fprintf (stdout, format ? format : DEFAULT_FORMAT, value);
- fflush (stdout);
+ if (_obase == 10) {
+ printf (_format ? _format : DEFAULT_FORMAT, value);
+ } else {
+ printf ("%s%s\n", (_prompt) ? _prompt : DEFAULT_PROMPT, mbitoa ((unsigned int)value));
+ }
+ return value;
+}
+
+double printl (double value)
+{
+ if (_obase == 10) {
+ printf (_minform ? _minform : DEFAULT_MINFORM, value);
+ } else {
+ printf ("%s", mbitoa ((unsigned int)value));
+ }
return value;
}