diff lwasm/main.c @ 372:90de73ba0cac

Created a useful debug framework and adjusted lw_expr_print() to return a "static" dynamic string
author lost@starbug
date Thu, 22 Apr 2010 18:19:06 -0600
parents 6b33faa21a0a
children d99322ef6f21
line wrap: on
line diff
--- a/lwasm/main.c	Wed Apr 21 23:29:18 2010 -0600
+++ b/lwasm/main.c	Thu Apr 22 18:19:06 2010 -0600
@@ -43,7 +43,7 @@
 static struct argp_option options[] =
 {
 	{ "output",		'o',	"FILE",		0,						"Output to FILE"},
-	{ "debug",		'd',	0,			0,						"Set debug mode"},
+	{ "debug",		'd',	"LEVEL",	OPTION_ARG_OPTIONAL,	"Set debug mode"},
 	{ "format",		'f',	"TYPE",		0,						"Select output format: decb, raw, obj, os9"},
 	{ "list",		'l',	"FILE",		OPTION_ARG_OPTIONAL,	"Generate list [to FILE]"},
 	{ "decb",		'b',	0,			0,						"Generate DECB .bin format output, equivalent of --format=decb"},
@@ -75,7 +75,10 @@
 		break;
 
 	case 'd':
-		as -> debug_level++;
+		if (!arg)
+			as -> debug_level = 50;
+		else
+			as -> debug_level = atoi(arg);
 		break;
 
 	case 'l':
@@ -190,7 +193,6 @@
 	{ NULL, NULL }
 };
 
-extern void dump_state(asmstate_t *as, FILE *fp);
 
 int main(int argc, char **argv)
 {
@@ -221,10 +223,10 @@
 
 	for (passnum = 0; passlist[passnum].fn; passnum++)
 	{
-		fprintf(stderr, "Doing pass %d (%s)\n", passnum, passlist[passnum].passname);
+		debug_message(&asmstate, 50, "Doing pass %d (%s)\n", passnum, passlist[passnum].passname);
 		(passlist[passnum].fn)(&asmstate);
-		fprintf(stderr, "After pass %d (%s):\n", passnum, passlist[passnum].passname);
-		dump_state(&asmstate, stderr);
+		debug_message(&asmstate, 50, "After pass %d (%s)\n", passnum, passlist[passnum].passname);
+		dump_state(&asmstate);
 		
 		if (asmstate.errorcount > 0)
 		{