X-Git-Url: https://secure.softndesign.org/git/?a=blobdiff_plain;f=format.c;h=e6b1fb609cfb90ae4d2d77f996c992f77dfc6e91;hb=0b69fdfbcd1174e83284c2bf984fd334b0ba679e;hp=152875022ad8a10f826378c7d611a5abd5d6edd4;hpb=e2a309f921968691af1566000dd694f191eca857;p=calc.git diff --git a/format.c b/format.c index 1528750..e6b1fb6 100644 --- a/format.c +++ b/format.c @@ -6,6 +6,9 @@ /* global variables */ +int _ibase = 10; +int _obase = 10; + #define DEFAULT_FORMAT "=> %.6g\n" char *_format = NULL; #define DEFAULT_MINFORM "%.6g" @@ -67,16 +70,70 @@ void free_format () } } +void set_base (int in, int out) +{ + _ibase = in; + _obase = out; +} + +int is_input_decimal () +{ + return (_ibase == 10); +} + +char *show_base () +{ + static char str[16] = {0}; + sprintf (str, "%d/%d", _ibase, _obase); + return str; +} + +int get_ibase () +{ + return _ibase; +} + +char *itoa (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); + if (_obase == 10) { + fprintf (stdout, _format ? _format : DEFAULT_FORMAT, value); + } else { + fprintf (stdout, "%s%s\n", (_prompt) ? _prompt : DEFAULT_PROMPT, itoa ((unsigned int)value)); + } fflush (stdout); return value; } double printl (double value) { - fprintf (stdout, _minform ? _minform : DEFAULT_MINFORM, value); + if (_obase == 10) { + fprintf (stdout, _minform ? _minform : DEFAULT_MINFORM, value); + } else { + fprintf (stdout, "%s%s", (_prompt) ? _prompt : DEFAULT_PROMPT, itoa ((unsigned int)value)); + } fflush (stdout); return value; }