#include <Core/Core.h>


using namespace Upp;

CONSOLE_APP_MAIN
{
	const Vector<String>& arg = CommandLine();
	if(arg.GetCount() != 1) {
		Cout() << "Usage: idmap file\n";
		SetExitCode(1);
		return;
	}
	FileIn in(arg[0]);
	if(!in) {
		SetExitCode(2);
		return;
	}
	VectorMap< String, Vector<int> > map;
	int line = 1;
	while(!in.IsEof()) {
		int c = in.Get();
		if(isalpha(c) || c == '_') {
			String id;
			id.Cat(c);
			c = in.Get();
			while(c > 0 && (isalnum(c) || c == '_')) {
				id.Cat(c);
				c = in.Get();
			}
			map.GetAdd(id).Add(line);
		}
		else
		if(c == '\n')
			line++;
	}
	Vector<int> order = GetSortOrder(map.GetKeys());
	for(int i = 0; i < order.GetCount(); i++) {
		Cout() << Format("%-32s: ", ~map.GetKey(order[i]));
		const Vector<int>& l = map[order[i]];
		for(int i = 0; i < l.GetCount(); i++) {
			if(i) Cout() << ", ";
			Cout() << l[i];
		}
		Cout() << '\n';
	}
}


syntax highlighted by Code2HTML, v. 0.9.1