static char *status_get_c(char *buffer, int64 *c, unsigned int c_ehi) { int64 current, next, rem; char *p; if (c_ehi) { strcpy(buffer, "OVERFLOW"); return buffer; } p = buffer + 31; *p = 0; current = *c; do { next = current; div64by32(&next, 10); rem = next; mul64by32(&rem, 10); neg64(&rem); add64to64(&rem, ¤t); *--p = rem.lo + '0'; current = next; } while (current.lo || current.hi); return p; }
void status_update_crypts(int64 *count) { unsigned int saved_hi; saved_hi = status.crypts.hi; add64to64(&status.crypts, count); if (status.crypts.hi != saved_hi && !count->hi && count->lo <= 0x00100000) status_ticks_overflow_safety(); }
void status_update_crypts(int64 *combs, unsigned int crypts) { { unsigned int saved_hi = status.combs.hi; add64to64(&status.combs, combs); if (status.combs.hi < saved_hi) status.combs_ehi++; } { unsigned int saved_lo = status.crypts.lo; add32to64(&status.crypts, crypts); if ((status.crypts.lo ^ saved_lo) & 0xfff00000U) status_ticks_overflow_safety(); } }
static void status_print_stdout(char *percent) { unsigned int time = status_get_time(); char s_wps[64]; char s_words[32]; int64 current, next, rem; char *s_words_ptr; s_words_ptr = &s_words[sizeof(s_words) - 1]; *s_words_ptr = 0; current = status.crypts; do { next = current; div64by32(&next, 10); rem = next; mul64by32(&rem, 10); neg64(&rem); add64to64(&rem, ¤t); *--s_words_ptr = rem.lo + '0'; current = next; } while (current.lo || current.hi); fprintf(stderr, "words: %s " "time: %u:%02u:%02u:%02u" "%s%s " "w/s: %s", s_words_ptr, time / 86400, time % 86400 / 3600, time % 3600 / 60, time % 60, strncmp(percent, " 100", 4) ? percent : " DONE", status_get_ETA(percent, time), status_get_cps(s_wps)); if ((options.flags & FLG_STATUS_CHK) || !(status.crypts.lo | status.crypts.hi)) fputc('\n', stderr); else fprintf(stderr, " current: %s\n", crk_get_key1()); }