mirror of
https://github.com/hashcat/hashcat.git
synced 2024-11-23 00:28:11 +00:00
Move prompt functions to terminal.c
This commit is contained in:
parent
7f1ecc7cb7
commit
5126a86907
@ -9,6 +9,7 @@
|
|||||||
#define _TERMINAL_H
|
#define _TERMINAL_H
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
@ -26,6 +27,9 @@
|
|||||||
|
|
||||||
#define QUIET 0
|
#define QUIET 0
|
||||||
|
|
||||||
|
void send_prompt ();
|
||||||
|
void clear_prompt ();
|
||||||
|
|
||||||
#if defined (_WIN)
|
#if defined (_WIN)
|
||||||
void SetConsoleWindowSize (const int x);
|
void SetConsoleWindowSize (const int x);
|
||||||
#endif
|
#endif
|
||||||
|
366
src/hashcat.c
366
src/hashcat.c
@ -82,8 +82,6 @@ extern hc_thread_mutex_t mux_display;
|
|||||||
|
|
||||||
extern void (*get_next_word_func) (char *, u32, u32 *, u32 *);
|
extern void (*get_next_word_func) (char *, u32, u32 *, u32 *);
|
||||||
|
|
||||||
extern const char *PROMPT;
|
|
||||||
|
|
||||||
extern const unsigned int full01;
|
extern const unsigned int full01;
|
||||||
extern const unsigned int full80;
|
extern const unsigned int full80;
|
||||||
|
|
||||||
@ -93,7 +91,7 @@ static double TARGET_MS_PROFILE[4] = { 2, 12, 96, 480 };
|
|||||||
|
|
||||||
const int comptime = COMPTIME;
|
const int comptime = COMPTIME;
|
||||||
|
|
||||||
#define FORCE 0
|
#define FORCE 0
|
||||||
|
|
||||||
// version
|
// version
|
||||||
#define VERSION 0
|
#define VERSION 0
|
||||||
@ -257,6 +255,50 @@ static uint default_benchmark_algorithms[NUM_DEFAULT_BENCHMARK_ALGORITHMS] =
|
|||||||
// loopback
|
// loopback
|
||||||
#define LOOPBACK 0
|
#define LOOPBACK 0
|
||||||
#define LOOPBACK_FILE "hashcat.loopback"
|
#define LOOPBACK_FILE "hashcat.loopback"
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
FILE *fp;
|
||||||
|
|
||||||
|
} loopback_ctx_t;
|
||||||
|
|
||||||
|
|
||||||
|
void loopback_format_plain (loopback_ctx_t *loopback_ctx, const unsigned char *plain_ptr, const uint plain_len)
|
||||||
|
{
|
||||||
|
int needs_hexify = 0;
|
||||||
|
|
||||||
|
for (uint i = 0; i < plain_len; i++)
|
||||||
|
{
|
||||||
|
if (plain_ptr[i] < 0x20)
|
||||||
|
{
|
||||||
|
needs_hexify = 1;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (plain_ptr[i] > 0x7f)
|
||||||
|
{
|
||||||
|
needs_hexify = 1;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (needs_hexify == 1)
|
||||||
|
{
|
||||||
|
fprintf (loopback_ctx->fp, "$HEX[");
|
||||||
|
|
||||||
|
for (uint i = 0; i < plain_len; i++)
|
||||||
|
{
|
||||||
|
fprintf (loopback_ctx->fp, "%02x", plain_ptr[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf (loopback_ctx->fp, "]");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fwrite (plain_ptr, plain_len, 1, loopback_ctx->fp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// hashlist
|
// hashlist
|
||||||
#define WEAK_HASH_THRESHOLD 100
|
#define WEAK_HASH_THRESHOLD 100
|
||||||
@ -268,6 +310,87 @@ static uint default_benchmark_algorithms[NUM_DEFAULT_BENCHMARK_ALGORITHMS] =
|
|||||||
|
|
||||||
// debug_mode
|
// debug_mode
|
||||||
#define DEBUG_MODE 0
|
#define DEBUG_MODE 0
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
FILE *fp;
|
||||||
|
|
||||||
|
} debug_ctx_t;
|
||||||
|
|
||||||
|
|
||||||
|
void debug_format_plain (debug_ctx_t *debug_ctx, const unsigned char *plain_ptr, const uint plain_len)
|
||||||
|
{
|
||||||
|
int needs_hexify = 0;
|
||||||
|
|
||||||
|
for (uint i = 0; i < plain_len; i++)
|
||||||
|
{
|
||||||
|
if (plain_ptr[i] < 0x20)
|
||||||
|
{
|
||||||
|
needs_hexify = 1;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (plain_ptr[i] > 0x7f)
|
||||||
|
{
|
||||||
|
needs_hexify = 1;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (needs_hexify == 1)
|
||||||
|
{
|
||||||
|
fprintf (debug_ctx->fp, "$HEX[");
|
||||||
|
|
||||||
|
for (uint i = 0; i < plain_len; i++)
|
||||||
|
{
|
||||||
|
fprintf (debug_ctx->fp, "%02x", plain_ptr[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf (debug_ctx->fp, "]");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fwrite (plain_ptr, plain_len, 1, debug_ctx->fp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void format_debug (char *debug_file, uint debug_mode, unsigned char *orig_plain_ptr, uint orig_plain_len, unsigned char *mod_plain_ptr, uint mod_plain_len, char *rule_buf, int rule_len)
|
||||||
|
{
|
||||||
|
unsigned char *rule_ptr = (unsigned char *) rule_buf;
|
||||||
|
|
||||||
|
debug_ctx_t debug_ctx;
|
||||||
|
|
||||||
|
debug_ctx.fp = fopen (debug_file, "ab");
|
||||||
|
|
||||||
|
if (debug_ctx.fp == NULL)
|
||||||
|
{
|
||||||
|
log_error ("ERROR: Could not open debug-file for writing");
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((debug_mode == 2) || (debug_mode == 3) || (debug_mode == 4))
|
||||||
|
{
|
||||||
|
debug_format_plain (&debug_ctx, orig_plain_ptr, orig_plain_len);
|
||||||
|
|
||||||
|
if ((debug_mode == 3) || (debug_mode == 4)) fputc (':', debug_ctx.fp);
|
||||||
|
}
|
||||||
|
|
||||||
|
fwrite (rule_ptr, rule_len, 1, debug_ctx.fp);
|
||||||
|
|
||||||
|
if (debug_mode == 4)
|
||||||
|
{
|
||||||
|
fputc (':', debug_ctx.fp);
|
||||||
|
|
||||||
|
debug_format_plain (&debug_ctx, mod_plain_ptr, mod_plain_len);
|
||||||
|
}
|
||||||
|
|
||||||
|
fputc ('\n', debug_ctx.fp);
|
||||||
|
|
||||||
|
fclose (debug_ctx.fp);
|
||||||
|
}
|
||||||
|
|
||||||
// runtime
|
// runtime
|
||||||
#define RUNTIME 0
|
#define RUNTIME 0
|
||||||
@ -275,21 +398,17 @@ static uint default_benchmark_algorithms[NUM_DEFAULT_BENCHMARK_ALGORITHMS] =
|
|||||||
// attack_mode
|
// attack_mode
|
||||||
#define ATTACK_MODE 0
|
#define ATTACK_MODE 0
|
||||||
|
|
||||||
// workaround
|
// kernel
|
||||||
#define NVIDIA_SPIN_DAMP 100
|
|
||||||
|
|
||||||
// workload
|
|
||||||
#define WORKLOAD_PROFILE 2
|
|
||||||
#define SCRYPT_TMTO 0
|
|
||||||
#define KERNEL_ACCEL 0
|
#define KERNEL_ACCEL 0
|
||||||
#define KERNEL_LOOPS 0
|
#define KERNEL_LOOPS 0
|
||||||
|
|
||||||
// kernel
|
|
||||||
#define KERNEL_RULES 1024
|
#define KERNEL_RULES 1024
|
||||||
#define KERNEL_COMBS 1024
|
#define KERNEL_COMBS 1024
|
||||||
#define KERNEL_BFS 1024
|
#define KERNEL_BFS 1024
|
||||||
#define KERNEL_THREADS_MAX 256
|
#define KERNEL_THREADS_MAX 256
|
||||||
#define KERNEL_THREADS_MAX_CPU 1
|
#define KERNEL_THREADS_MAX_CPU 1
|
||||||
|
#define WORKLOAD_PROFILE 2
|
||||||
|
#define SCRYPT_TMTO 0
|
||||||
|
#define NVIDIA_SPIN_DAMP 100
|
||||||
static const char OPTI_STR_ZERO_BYTE[] = "Zero-Byte";
|
static const char OPTI_STR_ZERO_BYTE[] = "Zero-Byte";
|
||||||
static const char OPTI_STR_PRECOMPUTE_INIT[] = "Precompute-Init";
|
static const char OPTI_STR_PRECOMPUTE_INIT[] = "Precompute-Init";
|
||||||
static const char OPTI_STR_PRECOMPUTE_MERKLE[] = "Precompute-Merkle-Demgard";
|
static const char OPTI_STR_PRECOMPUTE_MERKLE[] = "Precompute-Merkle-Demgard";
|
||||||
@ -309,6 +428,33 @@ static const char OPTI_STR_USES_BITS_8[] = "Uses-8-Bit";
|
|||||||
static const char OPTI_STR_USES_BITS_16[] = "Uses-16-Bit";
|
static const char OPTI_STR_USES_BITS_16[] = "Uses-16-Bit";
|
||||||
static const char OPTI_STR_USES_BITS_32[] = "Uses-32-Bit";
|
static const char OPTI_STR_USES_BITS_32[] = "Uses-32-Bit";
|
||||||
static const char OPTI_STR_USES_BITS_64[] = "Uses-64-Bit";
|
static const char OPTI_STR_USES_BITS_64[] = "Uses-64-Bit";
|
||||||
|
static char *stroptitype (const uint opti_type)
|
||||||
|
{
|
||||||
|
switch (opti_type)
|
||||||
|
{
|
||||||
|
case OPTI_TYPE_ZERO_BYTE: return ((char *) OPTI_STR_ZERO_BYTE);
|
||||||
|
case OPTI_TYPE_PRECOMPUTE_INIT: return ((char *) OPTI_STR_PRECOMPUTE_INIT);
|
||||||
|
case OPTI_TYPE_PRECOMPUTE_MERKLE: return ((char *) OPTI_STR_PRECOMPUTE_MERKLE);
|
||||||
|
case OPTI_TYPE_PRECOMPUTE_PERMUT: return ((char *) OPTI_STR_PRECOMPUTE_PERMUT);
|
||||||
|
case OPTI_TYPE_MEET_IN_MIDDLE: return ((char *) OPTI_STR_MEET_IN_MIDDLE);
|
||||||
|
case OPTI_TYPE_EARLY_SKIP: return ((char *) OPTI_STR_EARLY_SKIP);
|
||||||
|
case OPTI_TYPE_NOT_SALTED: return ((char *) OPTI_STR_NOT_SALTED);
|
||||||
|
case OPTI_TYPE_NOT_ITERATED: return ((char *) OPTI_STR_NOT_ITERATED);
|
||||||
|
case OPTI_TYPE_PREPENDED_SALT: return ((char *) OPTI_STR_PREPENDED_SALT);
|
||||||
|
case OPTI_TYPE_APPENDED_SALT: return ((char *) OPTI_STR_APPENDED_SALT);
|
||||||
|
case OPTI_TYPE_SINGLE_HASH: return ((char *) OPTI_STR_SINGLE_HASH);
|
||||||
|
case OPTI_TYPE_SINGLE_SALT: return ((char *) OPTI_STR_SINGLE_SALT);
|
||||||
|
case OPTI_TYPE_BRUTE_FORCE: return ((char *) OPTI_STR_BRUTE_FORCE);
|
||||||
|
case OPTI_TYPE_RAW_HASH: return ((char *) OPTI_STR_RAW_HASH);
|
||||||
|
case OPTI_TYPE_SLOW_HASH_SIMD: return ((char *) OPTI_STR_SLOW_HASH_SIMD);
|
||||||
|
case OPTI_TYPE_USES_BITS_8: return ((char *) OPTI_STR_USES_BITS_8);
|
||||||
|
case OPTI_TYPE_USES_BITS_16: return ((char *) OPTI_STR_USES_BITS_16);
|
||||||
|
case OPTI_TYPE_USES_BITS_32: return ((char *) OPTI_STR_USES_BITS_32);
|
||||||
|
case OPTI_TYPE_USES_BITS_64: return ((char *) OPTI_STR_USES_BITS_64);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (NULL);
|
||||||
|
}
|
||||||
|
|
||||||
// powertune
|
// powertune
|
||||||
#define POWERTUNE_ENABLE 0
|
#define POWERTUNE_ENABLE 0
|
||||||
@ -488,163 +634,13 @@ int sort_by_stringptr (const void *p1, const void *p2)
|
|||||||
return strcmp (*s1, *s2);
|
return strcmp (*s1, *s2);
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
FILE *fp;
|
|
||||||
|
|
||||||
} loopback_ctx_t;
|
|
||||||
|
|
||||||
|
|
||||||
void loopback_format_plain (loopback_ctx_t *loopback_ctx, const unsigned char *plain_ptr, const uint plain_len)
|
|
||||||
{
|
|
||||||
int needs_hexify = 0;
|
|
||||||
|
|
||||||
for (uint i = 0; i < plain_len; i++)
|
|
||||||
{
|
|
||||||
if (plain_ptr[i] < 0x20)
|
|
||||||
{
|
|
||||||
needs_hexify = 1;
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (plain_ptr[i] > 0x7f)
|
|
||||||
{
|
|
||||||
needs_hexify = 1;
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (needs_hexify == 1)
|
|
||||||
{
|
|
||||||
fprintf (loopback_ctx->fp, "$HEX[");
|
|
||||||
|
|
||||||
for (uint i = 0; i < plain_len; i++)
|
|
||||||
{
|
|
||||||
fprintf (loopback_ctx->fp, "%02x", plain_ptr[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
fprintf (loopback_ctx->fp, "]");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
fwrite (plain_ptr, plain_len, 1, loopback_ctx->fp);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
FILE *fp;
|
|
||||||
|
|
||||||
} debug_ctx_t;
|
|
||||||
|
|
||||||
|
|
||||||
void debug_format_plain (debug_ctx_t *debug_ctx, const unsigned char *plain_ptr, const uint plain_len)
|
|
||||||
{
|
|
||||||
int needs_hexify = 0;
|
|
||||||
|
|
||||||
for (uint i = 0; i < plain_len; i++)
|
|
||||||
{
|
|
||||||
if (plain_ptr[i] < 0x20)
|
|
||||||
{
|
|
||||||
needs_hexify = 1;
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (plain_ptr[i] > 0x7f)
|
|
||||||
{
|
|
||||||
needs_hexify = 1;
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (needs_hexify == 1)
|
|
||||||
{
|
|
||||||
fprintf (debug_ctx->fp, "$HEX[");
|
|
||||||
|
|
||||||
for (uint i = 0; i < plain_len; i++)
|
|
||||||
{
|
|
||||||
fprintf (debug_ctx->fp, "%02x", plain_ptr[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
fprintf (debug_ctx->fp, "]");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
fwrite (plain_ptr, plain_len, 1, debug_ctx->fp);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void format_debug (char *debug_file, uint debug_mode, unsigned char *orig_plain_ptr, uint orig_plain_len, unsigned char *mod_plain_ptr, uint mod_plain_len, char *rule_buf, int rule_len)
|
|
||||||
{
|
|
||||||
unsigned char *rule_ptr = (unsigned char *) rule_buf;
|
|
||||||
|
|
||||||
debug_ctx_t debug_ctx;
|
|
||||||
|
|
||||||
debug_ctx.fp = fopen (debug_file, "ab");
|
|
||||||
|
|
||||||
if (debug_ctx.fp == NULL)
|
|
||||||
{
|
|
||||||
log_error ("ERROR: Could not open debug-file for writing");
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((debug_mode == 2) || (debug_mode == 3) || (debug_mode == 4))
|
|
||||||
{
|
|
||||||
debug_format_plain (&debug_ctx, orig_plain_ptr, orig_plain_len);
|
|
||||||
|
|
||||||
if ((debug_mode == 3) || (debug_mode == 4)) fputc (':', debug_ctx.fp);
|
|
||||||
}
|
|
||||||
|
|
||||||
fwrite (rule_ptr, rule_len, 1, debug_ctx.fp);
|
|
||||||
|
|
||||||
if (debug_mode == 4)
|
|
||||||
{
|
|
||||||
fputc (':', debug_ctx.fp);
|
|
||||||
|
|
||||||
debug_format_plain (&debug_ctx, mod_plain_ptr, mod_plain_len);
|
|
||||||
}
|
|
||||||
|
|
||||||
fputc ('\n', debug_ctx.fp);
|
|
||||||
|
|
||||||
fclose (debug_ctx.fp);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static char *stroptitype (const uint opti_type)
|
|
||||||
{
|
|
||||||
switch (opti_type)
|
|
||||||
{
|
|
||||||
case OPTI_TYPE_ZERO_BYTE: return ((char *) OPTI_STR_ZERO_BYTE);
|
|
||||||
case OPTI_TYPE_PRECOMPUTE_INIT: return ((char *) OPTI_STR_PRECOMPUTE_INIT);
|
|
||||||
case OPTI_TYPE_PRECOMPUTE_MERKLE: return ((char *) OPTI_STR_PRECOMPUTE_MERKLE);
|
|
||||||
case OPTI_TYPE_PRECOMPUTE_PERMUT: return ((char *) OPTI_STR_PRECOMPUTE_PERMUT);
|
|
||||||
case OPTI_TYPE_MEET_IN_MIDDLE: return ((char *) OPTI_STR_MEET_IN_MIDDLE);
|
|
||||||
case OPTI_TYPE_EARLY_SKIP: return ((char *) OPTI_STR_EARLY_SKIP);
|
|
||||||
case OPTI_TYPE_NOT_SALTED: return ((char *) OPTI_STR_NOT_SALTED);
|
|
||||||
case OPTI_TYPE_NOT_ITERATED: return ((char *) OPTI_STR_NOT_ITERATED);
|
|
||||||
case OPTI_TYPE_PREPENDED_SALT: return ((char *) OPTI_STR_PREPENDED_SALT);
|
|
||||||
case OPTI_TYPE_APPENDED_SALT: return ((char *) OPTI_STR_APPENDED_SALT);
|
|
||||||
case OPTI_TYPE_SINGLE_HASH: return ((char *) OPTI_STR_SINGLE_HASH);
|
|
||||||
case OPTI_TYPE_SINGLE_SALT: return ((char *) OPTI_STR_SINGLE_SALT);
|
|
||||||
case OPTI_TYPE_BRUTE_FORCE: return ((char *) OPTI_STR_BRUTE_FORCE);
|
|
||||||
case OPTI_TYPE_RAW_HASH: return ((char *) OPTI_STR_RAW_HASH);
|
|
||||||
case OPTI_TYPE_SLOW_HASH_SIMD: return ((char *) OPTI_STR_SLOW_HASH_SIMD);
|
|
||||||
case OPTI_TYPE_USES_BITS_8: return ((char *) OPTI_STR_USES_BITS_8);
|
|
||||||
case OPTI_TYPE_USES_BITS_16: return ((char *) OPTI_STR_USES_BITS_16);
|
|
||||||
case OPTI_TYPE_USES_BITS_32: return ((char *) OPTI_STR_USES_BITS_32);
|
|
||||||
case OPTI_TYPE_USES_BITS_64: return ((char *) OPTI_STR_USES_BITS_64);
|
|
||||||
}
|
|
||||||
|
|
||||||
return (NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void myabort ()
|
static void myabort ()
|
||||||
@ -779,26 +775,7 @@ static void hc_signal (void (callback) (int))
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
static void send_prompt ()
|
|
||||||
{
|
|
||||||
fprintf (stdout, "%s", PROMPT);
|
|
||||||
|
|
||||||
fflush (stdout);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void clear_prompt ()
|
|
||||||
{
|
|
||||||
fputc ('\r', stdout);
|
|
||||||
|
|
||||||
for (size_t i = 0; i < strlen (PROMPT); i++)
|
|
||||||
{
|
|
||||||
fputc (' ', stdout);
|
|
||||||
}
|
|
||||||
|
|
||||||
fputc ('\r', stdout);
|
|
||||||
|
|
||||||
fflush (stdout);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void check_hash (hc_device_param_t *device_param, plain_t *plain)
|
static void check_hash (hc_device_param_t *device_param, plain_t *plain)
|
||||||
{
|
{
|
||||||
@ -1102,9 +1079,7 @@ static void check_hash (hc_device_param_t *device_param, plain_t *plain)
|
|||||||
|
|
||||||
if ((quiet == 0) && (debug_file == NULL))
|
if ((quiet == 0) && (debug_file == NULL))
|
||||||
{
|
{
|
||||||
fprintf (stdout, "%s", PROMPT);
|
send_prompt ();
|
||||||
|
|
||||||
fflush (stdout);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2951,8 +2926,7 @@ static void *thread_monitor (void *p)
|
|||||||
log_info ("");
|
log_info ("");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data.quiet == 0) fprintf (stdout, "%s", PROMPT);
|
if (data.quiet == 0) send_prompt ();
|
||||||
if (data.quiet == 0) fflush (stdout);
|
|
||||||
|
|
||||||
slowdown_warnings++;
|
slowdown_warnings++;
|
||||||
}
|
}
|
||||||
@ -3473,9 +3447,7 @@ static void set_kernel_power_final (const u64 kernel_power_final)
|
|||||||
log_info ("INFO: approaching final keyspace, workload adjusted");
|
log_info ("INFO: approaching final keyspace, workload adjusted");
|
||||||
log_info ("");
|
log_info ("");
|
||||||
|
|
||||||
fprintf (stdout, "%s", PROMPT);
|
send_prompt ();
|
||||||
|
|
||||||
fflush (stdout);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
data.kernel_power_final = kernel_power_final;
|
data.kernel_power_final = kernel_power_final;
|
||||||
@ -4079,8 +4051,7 @@ static void *thread_keypress (void *p)
|
|||||||
|
|
||||||
log_info ("");
|
log_info ("");
|
||||||
|
|
||||||
if (quiet == 0) fprintf (stdout, "%s", PROMPT);
|
if (quiet == 0) send_prompt ();
|
||||||
if (quiet == 0) fflush (stdout);
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -4092,8 +4063,7 @@ static void *thread_keypress (void *p)
|
|||||||
|
|
||||||
log_info ("");
|
log_info ("");
|
||||||
|
|
||||||
if (quiet == 0) fprintf (stdout, "%s", PROMPT);
|
if (quiet == 0) send_prompt ();
|
||||||
if (quiet == 0) fflush (stdout);
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -4105,8 +4075,7 @@ static void *thread_keypress (void *p)
|
|||||||
|
|
||||||
log_info ("");
|
log_info ("");
|
||||||
|
|
||||||
if (quiet == 0) fprintf (stdout, "%s", PROMPT);
|
if (quiet == 0) send_prompt ();
|
||||||
if (quiet == 0) fflush (stdout);
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -4118,8 +4087,7 @@ static void *thread_keypress (void *p)
|
|||||||
|
|
||||||
log_info ("");
|
log_info ("");
|
||||||
|
|
||||||
if (quiet == 0) fprintf (stdout, "%s", PROMPT);
|
if (quiet == 0) send_prompt ();
|
||||||
if (quiet == 0) fflush (stdout);
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -4131,8 +4099,7 @@ static void *thread_keypress (void *p)
|
|||||||
|
|
||||||
log_info ("");
|
log_info ("");
|
||||||
|
|
||||||
if (quiet == 0) fprintf (stdout, "%s", PROMPT);
|
if (quiet == 0) send_prompt ();
|
||||||
if (quiet == 0) fflush (stdout);
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -13336,8 +13303,7 @@ int main (int argc, char **argv)
|
|||||||
{
|
{
|
||||||
if ((quiet == 0) && (status == 0) && (benchmark == 0))
|
if ((quiet == 0) && (status == 0) && (benchmark == 0))
|
||||||
{
|
{
|
||||||
if (quiet == 0) fprintf (stdout, "%s", PROMPT);
|
if (quiet == 0) send_prompt ();
|
||||||
if (quiet == 0) fflush (stdout);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (wordlist_mode == WL_MODE_STDIN)
|
else if (wordlist_mode == WL_MODE_STDIN)
|
||||||
|
@ -8,6 +8,27 @@
|
|||||||
|
|
||||||
const char *PROMPT = "[s]tatus [p]ause [r]esume [b]ypass [c]heckpoint [q]uit => ";
|
const char *PROMPT = "[s]tatus [p]ause [r]esume [b]ypass [c]heckpoint [q]uit => ";
|
||||||
|
|
||||||
|
void send_prompt ()
|
||||||
|
{
|
||||||
|
fprintf (stdout, "%s", PROMPT);
|
||||||
|
|
||||||
|
fflush (stdout);
|
||||||
|
}
|
||||||
|
|
||||||
|
void clear_prompt ()
|
||||||
|
{
|
||||||
|
fputc ('\r', stdout);
|
||||||
|
|
||||||
|
for (size_t i = 0; i < strlen (PROMPT); i++)
|
||||||
|
{
|
||||||
|
fputc (' ', stdout);
|
||||||
|
}
|
||||||
|
|
||||||
|
fputc ('\r', stdout);
|
||||||
|
|
||||||
|
fflush (stdout);
|
||||||
|
}
|
||||||
|
|
||||||
#if defined (_WIN)
|
#if defined (_WIN)
|
||||||
void SetConsoleWindowSize (const int x)
|
void SetConsoleWindowSize (const int x)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user