#include "linux_syscall.h"
#include "linux_console.h"

#define MACRO(hello, hello2) 1

#ifndef A
#define A 135
#endif
#define B A
#define C B
#define D C
#define E D
#define F E
#define G F
#define H G
#define I H

#define FOO() "hah?\n"
#define BAR(X) ( X " There\n" )
#define BAZ(X) #X
#define SUM(X, Y) ((X) + (Y))
#define REALLY_SUM(...) SUM(__VA_ARGS__)


#define hash_hash #   	/* comment */	 ## #
#define mkstr(a) # a
#define in_between(a) mkstr(a)
#define join(c, d) in_between(c hash_hash d)

#define ECHO(X) X
#define print_debug(X) ECHO(print_debug(X))

static void test(void)
{
	print_debug(FOO());
	print_debug(BAR("Hi!!"));
	print_debug(BAZ(This should be shown as a string... "enclosed in quotes") "\n");
	print_debug("This is a quote\" see\n");
	print_debug(BAR(BAZ(I)));

	print_debug_hex32(REALLY_SUM(1,2));
	print_debug("\n");

	print_debug(join(x, y) "\n");

	print_debug("romcc: ");
	print_debug_hex8(__ROMCC__);
	print_debug(".");
	print_debug_hex8(__ROMCC_MINOR__);
	print_debug("\n");

	print_debug(__FILE__);
	print_debug(":");
	print_debug(__func__);
	print_debug(":");
	print_debug_hex32(__LINE__);
	print_debug("\n");

	print_debug("Compiled at: ");
	print_debug(__DATE__);
	print_debug(" ");
	print_debug(__TIME__);
	print_debug("\n");

	print_debug("Compile time: ");
	print_debug(__TIME__);
	print_debug("\n");

	_exit(0);
}