#include <gtk/gtk.h>
#include <stdarg.h>
#include <sys/stat.h>
#include <openssl/evp.h>
#include <sys/types.h>
#include "ghasher.h"

void show_error_dialog(GtkWidget *mainWindow, const gchar * message, ...)
{
	va_list args;
	char *res;

	GtkWidget *dialog;

	va_start(args, message);
	res = g_strdup_vprintf(message, args);
	va_end(args);
	dialog = gtk_message_dialog_new(GTK_WINDOW(mainWindow), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, res);
	g_free(res);
	gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE);
	gtk_dialog_run(GTK_DIALOG(dialog));
	gtk_widget_destroy(dialog);

}

char *hex_dump(const unsigned char in[], int len, char out[], int max)
{
#define HIGH_NIBBLE(c)  ( ((c) & 0xF0) >> 4 )
#define LOW_NIBBLE(c)   (  (c) & 0x0F)

	int i, t, hn, ln;

	if (len <= 0 || max <= 0) {
		out[0] = '\0';
		return out;
	}

	for (i = 0, t = 0; i < len; ++i) {
		if (t + 1 >= max) {
			break;
		}

		hn = HIGH_NIBBLE(in[i]);
		ln = LOW_NIBBLE(in[i]);

		out[t++] = (hn > 9) ? hn + 'W' : hn + '0';
		if (t + 1 >= max) {
			break;
		}
		out[t++] = (ln > 9) ? ln + 'W' : ln + '0';
	}

	out[t] = '\0';

	return out;
#undef HIGH_NIBBLE
#undef LOW_NIBBLE
}


syntax highlighted by Code2HTML, v. 0.9.1