#define _digit(a) ((a)+SC_0)
#define _bitisset(digit, pos) (((digit) & SHIFT(pos)) != SC_0)
-/* shortcut output for debugging */
-# define sc_print_hex(a) sc_print((a), 0, SC_HEX, 0)
-# define sc_print_dec(a) sc_print((a), 0, SC_DEC, 1)
-# define sc_print_oct(a) sc_print((a), 0, SC_OCT, 0)
-# define sc_print_bin(a) sc_print((a), 0, SC_BIN, 0)
-
-#ifdef STRCALC_DEBUG_PRINTCOMP
-# define DEBUGPRINTF_COMPUTATION(x) printf x
-#else
-# define DEBUGPRINTF_COMPUTATION(x) ((void)0)
-#endif
-#ifdef STRCALC_DEBUG
-# define DEBUGPRINTF(x) printf x
-#else
-# define DEBUGPRINTF(x) ((void)0)
-#endif
-
-
/*
* private variables
*/
/* special case */
if (bits == 0) {
bits = bit_pattern_size;
-#ifdef STRCALC_DEBUG_FULLPRINT
- bits <<= 1;
-#endif
}
nibbles = bits >> 2;
switch (base) {
case SC_hex:
for (counter = 0; counter < nibbles; ++counter) {
*(--pos) = digits[_val(val[counter])];
-#ifdef STRCALC_DEBUG_GROUPPRINT
- if ((counter+1)%8 == 0)
- *(--pos) = ' ';
-#endif
}
/* last nibble must be masked */
/* now kill zeros */
for (; counter > 1; --counter, ++pos) {
-#ifdef STRCALC_DEBUG_GROUPPRINT
- if (pos[0] == ' ') ++pos;
-#endif
if (pos[0] != '0')
break;
}
calc_buffer = XMALLOCN(char, calc_buffer_size + 1);
output_buffer = XMALLOCN(char, bit_pattern_size + 1);
-
- DEBUGPRINTF(("init strcalc: \n\tPRECISION: %d\n\tCALC_BUFFER_SIZE = %d\n\tMAX_VALUE_SIZE = %d\n\tbuffer pointer: %p\n", precision, calc_buffer_size, max_value_size, calc_buffer));
}
}
CLEAR_BUFFER(calc_buffer);
carry_flag = 0;
- DEBUGPRINTF_COMPUTATION(("%s + ", sc_print_hex(value1)));
- DEBUGPRINTF_COMPUTATION(("%s -> ", sc_print_hex(value2)));
-
do_add((const char*) value1, (const char*) value2, (char*) calc_buffer);
- DEBUGPRINTF_COMPUTATION(("%s\n", sc_print_hex(calc_buffer)));
-
if ((buffer != NULL) && (buffer != calc_buffer)) {
memcpy(buffer, calc_buffer, calc_buffer_size);
}
CLEAR_BUFFER(calc_buffer);
carry_flag = 0;
- DEBUGPRINTF_COMPUTATION(("%s - ", sc_print_hex(value1)));
- DEBUGPRINTF_COMPUTATION(("%s -> ", sc_print_hex(value2)));
-
do_sub((const char*) value1, (const char*) value2, calc_buffer);
- DEBUGPRINTF_COMPUTATION(("%s\n", sc_print_hex(calc_buffer)));
-
if ((buffer != NULL) && (buffer != calc_buffer)) {
memcpy(buffer, calc_buffer, calc_buffer_size);
}
{
carry_flag = 0;
- DEBUGPRINTF_COMPUTATION(("- %s ->", sc_print_hex(value1)));
-
do_negate((const char*) value1, calc_buffer);
- DEBUGPRINTF_COMPUTATION(("%s\n", sc_print_hex(calc_buffer)));
-
if ((buffer != NULL) && (buffer != calc_buffer)) {
memcpy(buffer, calc_buffer, calc_buffer_size);
}
CLEAR_BUFFER(calc_buffer);
carry_flag = 0;
- DEBUGPRINTF_COMPUTATION(("%s & ", sc_print_hex(value1)));
- DEBUGPRINTF_COMPUTATION(("%s -> ", sc_print_hex(value2)));
-
do_bitand((const char*) value1, (const char*) value2, calc_buffer);
- DEBUGPRINTF_COMPUTATION(("%s\n", sc_print_hex(calc_buffer)));
-
if ((buffer != NULL) && (buffer != calc_buffer)) {
memcpy(buffer, calc_buffer, calc_buffer_size);
}
CLEAR_BUFFER(calc_buffer);
carry_flag = 0;
- DEBUGPRINTF_COMPUTATION(("%s & ", sc_print_hex(value1)));
- DEBUGPRINTF_COMPUTATION(("~%s -> ", sc_print_hex(value2)));
-
do_bitandnot((const char*) value1, (const char*) value2, calc_buffer);
- DEBUGPRINTF_COMPUTATION(("%s\n", sc_print_hex(calc_buffer)));
-
if (buffer != NULL && buffer != calc_buffer) {
memcpy(buffer, calc_buffer, calc_buffer_size);
}
CLEAR_BUFFER(calc_buffer);
carry_flag = 0;
- DEBUGPRINTF_COMPUTATION(("%s | ", sc_print_hex(value1)));
- DEBUGPRINTF_COMPUTATION(("%s -> ", sc_print_hex(value2)));
-
do_bitor((const char*) value1, (const char*) value2, calc_buffer);
- DEBUGPRINTF_COMPUTATION(("%s\n", sc_print_hex(calc_buffer)));
-
if ((buffer != NULL) && (buffer != calc_buffer)) {
memcpy(buffer, calc_buffer, calc_buffer_size);
}
CLEAR_BUFFER(calc_buffer);
carry_flag = 0;
- DEBUGPRINTF_COMPUTATION(("%s ^ ", sc_print_hex(value1)));
- DEBUGPRINTF_COMPUTATION(("%s -> ", sc_print_hex(value2)));
-
do_bitxor((const char*) value1, (const char*) value2, calc_buffer);
- DEBUGPRINTF_COMPUTATION(("%s\n", sc_print_hex(calc_buffer)));
-
if ((buffer != NULL) && (buffer != calc_buffer)) {
memcpy(buffer, calc_buffer, calc_buffer_size);
}
CLEAR_BUFFER(calc_buffer);
carry_flag = 0;
- DEBUGPRINTF_COMPUTATION(("~ %s ->", sc_print_hex(value1)));
-
do_bitnot((const char*) value1, calc_buffer);
- DEBUGPRINTF_COMPUTATION(("%s\n", sc_print_hex(calc_buffer)));
-
if ((buffer != NULL) && (buffer != calc_buffer)) {
memcpy(buffer, calc_buffer, calc_buffer_size);
}
CLEAR_BUFFER(calc_buffer);
carry_flag = 0;
- DEBUGPRINTF_COMPUTATION(("%s * ", sc_print_hex(value1)));
- DEBUGPRINTF_COMPUTATION(("%s -> ", sc_print_hex(value2)));
-
do_mul((const char*) value1, (const char*) value2, calc_buffer);
- DEBUGPRINTF_COMPUTATION(("%s\n", sc_print_hex(calc_buffer)));
-
if ((buffer != NULL) && (buffer != calc_buffer)) {
memcpy(buffer, calc_buffer, calc_buffer_size);
}
CLEAR_BUFFER(calc_buffer);
carry_flag = 0;
- DEBUGPRINTF_COMPUTATION(("%s / ", sc_print_hex(value1)));
- DEBUGPRINTF_COMPUTATION(("%s -> ", sc_print_hex(value2)));
-
do_divmod((const char*) value1, (const char*) value2, calc_buffer, unused_res);
- DEBUGPRINTF_COMPUTATION(("%s\n", sc_print_hex(calc_buffer)));
-
if ((buffer != NULL) && (buffer != calc_buffer)) {
memcpy(buffer, calc_buffer, calc_buffer_size);
}
CLEAR_BUFFER(calc_buffer);
carry_flag = 0;
- DEBUGPRINTF_COMPUTATION(("%s %% ", sc_print_hex(value1)));
- DEBUGPRINTF_COMPUTATION(("%s -> ", sc_print_hex(value2)));
-
do_divmod((const char*) value1, (const char*) value2, unused_res, calc_buffer);
- DEBUGPRINTF_COMPUTATION(("%s\n", sc_print_hex(calc_buffer)));
-
if ((buffer != NULL) && (buffer != calc_buffer)) {
memcpy(buffer, calc_buffer, calc_buffer_size);
}
CLEAR_BUFFER(calc_buffer);
carry_flag = 0;
- DEBUGPRINTF_COMPUTATION(("%s %% ", sc_print_hex(value1)));
- DEBUGPRINTF_COMPUTATION(("%s -> ", sc_print_hex(value2)));
-
do_divmod((const char*) value1, (const char*) value2, (char*) div_buffer, (char*) mod_buffer);
-
- DEBUGPRINTF_COMPUTATION(("%s:%s\n", sc_print_hex(div_buffer), sc_print_hex(mod_buffer)));
}
{
carry_flag = 0;
- DEBUGPRINTF_COMPUTATION(("%s << %ld ", sc_print_hex(value1), shift_cnt));
do_shl((const char*) val1, calc_buffer, shift_cnt, bitsize, sign);
- DEBUGPRINTF_COMPUTATION(("-> %s\n", sc_print_hex(calc_buffer)));
-
if ((buffer != NULL) && (buffer != calc_buffer)) {
memmove(buffer, calc_buffer, calc_buffer_size);
}
{
carry_flag = 0;
- DEBUGPRINTF_COMPUTATION(("%s >>u %ld ", sc_print_hex(value1), shift_cnt));
do_shr((const char*) val1, calc_buffer, shift_cnt, bitsize, sign, 0);
- DEBUGPRINTF_COMPUTATION(("-> %s\n", sc_print_hex(calc_buffer)));
-
if ((buffer != NULL) && (buffer != calc_buffer)) {
memmove(buffer, calc_buffer, calc_buffer_size);
}
{
carry_flag = 0;
- DEBUGPRINTF_COMPUTATION(("%s >>s %ld ", sc_print_hex(value1), shift_cnt));
do_shr((const char*) val1, calc_buffer, shift_cnt, bitsize, sign, 1);
- DEBUGPRINTF_COMPUTATION(("-> %s\n", sc_print_hex(calc_buffer)));
-
if ((buffer != NULL) && (buffer != calc_buffer)) {
memmove(buffer, calc_buffer, calc_buffer_size);
}
carry_flag = 0;
- DEBUGPRINTF_COMPUTATION(("%s >>s %ld ", sc_print_hex(value1), offset));
do_shr((const char*) val1, calc_buffer, offset, bitsize, sign, 1);
- DEBUGPRINTF_COMPUTATION(("-> %s\n", sc_print_hex(calc_buffer)));
-
if ((buffer != NULL) && (buffer != calc_buffer)) {
memmove(buffer, calc_buffer, calc_buffer_size);
}
carry_flag = 0;
- DEBUGPRINTF_COMPUTATION(("%s <<>> %ld ", sc_print_hex(value1), offset));
do_rotl((const char*) val1, calc_buffer, offset, bitsize, sign);
- DEBUGPRINTF_COMPUTATION(("-> %s\n", sc_print_hex(calc_buffer)));
-
if ((buffer != NULL) && (buffer != calc_buffer)) {
memmove(buffer, calc_buffer, calc_buffer_size);
}