| #include <u.h> | 
 | #include <libc.h> | 
 | #include <ctype.h> | 
 | #include <String.h> | 
 | #include "message.h" | 
 |  | 
 | Message *root; | 
 |  | 
 | void | 
 | prindent(int i) | 
 | { | 
 | 	for(; i > 0; i--) | 
 | 		print(" "); | 
 | } | 
 |  | 
 | void | 
 | prstring(int indent, char *tag, String *s) | 
 | { | 
 | 	if(s == nil) | 
 | 		return; | 
 | 	prindent(indent+1); | 
 | 	print("%s %s\n", tag, s_to_c(s)); | 
 | } | 
 |  | 
 | void | 
 | info(int indent, int mno, Message *m) | 
 | { | 
 | 	int i; | 
 | 	Message *nm; | 
 |  | 
 | 	prindent(indent); | 
 | 	print("%d%c %d ", mno, m->allocated?'*':' ', m->end - m->start); | 
 | 	if(m->unixfrom != nil) | 
 | 		print("uf %s ", s_to_c(m->unixfrom)); | 
 | 	if(m->unixdate != nil) | 
 | 		print("ud %s ", s_to_c(m->unixdate)); | 
 | 	print("\n"); | 
 | 	prstring(indent, "from:", m->from822); | 
 | 	prstring(indent, "sender:", m->sender822); | 
 | 	prstring(indent, "to:", m->to822); | 
 | 	prstring(indent, "cc:", m->cc822); | 
 | 	prstring(indent, "reply-to:", m->replyto822); | 
 | 	prstring(indent, "subject:", m->subject822); | 
 | 	prstring(indent, "date:", m->date822); | 
 | 	prstring(indent, "filename:", m->filename); | 
 | 	prstring(indent, "type:", m->type); | 
 | 	prstring(indent, "charset:", m->charset); | 
 |  | 
 | 	i = 1; | 
 | 	for(nm = m->part; nm != nil; nm = nm->next){ | 
 | 		info(indent+1, i++, nm); | 
 | 	} | 
 | } | 
 | 	 | 
 |  | 
 | void | 
 | main(int argc, char **argv) | 
 | { | 
 | 	char *err; | 
 | 	char *mboxfile; | 
 |  | 
 | 	ARGBEGIN{ | 
 | 	}ARGEND; | 
 |  | 
 | 	if(argc > 0) | 
 | 		mboxfile = argv[0]; | 
 | 	else | 
 | 		mboxfile = "./mbox"; | 
 |  | 
 | 	root = newmessage(nil); | 
 |  | 
 | 	err = readmbox(mboxfile, &root->part); | 
 | 	if(err != nil){ | 
 | 		fprint(2, "boom: %s\n", err); | 
 | 		exits(0); | 
 | 	} | 
 |  | 
 | 	info(0, 1, root); | 
 |  | 
 | 	exits(0); | 
 | } |