function info_line(name, sel, host, port, dst){
	printf("[i|%s|%s|%s|%s]\r\n", name, sel, host, port) > dst;
}

function show_link(l, i, dst){

	if(l[i,"Category"] == "")
		print "Uncategorised link:", l[i,"Selector"];
	else{
		printf("[1|%s|%s|%s|%s]\r\n", l[i,"LinkName"], l[i,"Selector"], l[i,"Host"], l[i,"Port"] ) > dst;
		split(l[i,"Description"], descr, "\n");
		for (d in descr){
			info_line(descr[d],"Err", HOST, PORT, dst);
		}
		info_line("", "Err", HOST, PORT, dst);
	}

}


function show_category_link(category, i, dst){
	printf("[1|%s|%s|%s|%s]\r\n", category[i,"LinkName"], category[i,"Selector"], category[i,"Host"], category[i,"Port"]) > dst;
}



function get_parents(a){
	delete pars;
	split(a, pars, /\ \f\n\r\t\v*,\ \f\n\r\t\v*/);
	for (k in pars){
		gsub(/ +/, "", pars[k]);
	}

}

function category_in_parents(category, i){

	get_parents(category[i,"Parent"]);
	for (p in pars){
		if (pars[p]!="none"){### the root page does not have parents...
			dst=cfiles[pars[p]];
			if (has_categories[pars[p]] == ""){
				info_line("", "Err", HOST, PORT, dst);
				info_line("Sub-categories:", "Err", HOST, PORT, dst) ;
			}
			has_categories[pars[p]]=1;
			show_category_link(category, i, dst);
		}
	}
}

function category_header(category, i, dst){
	info_line(category[i,"Title"], "Err", HOST, PORT, dst);
	info_line("", "Err", HOST, PORT, dst);
	split(category[i,"Description"], descr, "\n");
	for (d in descr){
		info_line(descr[d], "Err", HOST, PORT, dst);
	}
}

function get_link_categories(a){
	delete cats;
	split(a, cats, /([\ \f\n\r\t\v*],[\ \f\n\r\t\v]*|,[\ \f\n\r\t\v]*)/);
	for (k in cats){
		gsub(/ +/, "", cats[k]);
	}
}

########################################


function render_init(){

}


function render_categories(){
	for (i=1; i<=cnum; i++){
		cname=category[i,"Name"];
		cfiles[cname]=BASEDIR category[i,"Selector"];
		cmd="dirname " cfiles[cname]; 
		cmd | getline bdir;
		cmd="ls -d " bdir " 2>/dev/null";
		if (system(cmd) != 0){
			cmd="mkdir -p " bdir;
			system(cmd);
		}
		cmd=sprintf("rm -f %s", cfiles[cname]);
		system(cmd);
		category_header(category, i, cfiles[cname]);
		category_in_parents(category, i);
	}
}

function render_post_categories(){


}


function render_links(){

	for (i=1;i<=lnum;i++){
		get_link_categories(link[i,"Category"]);
		for (c in cats){
			if (cfiles[cats[c]]!=""){
				dst=cfiles[cats[c]];
				if (has_links[cats[c]] == ""){
					info_line("_______________", "Err", \
					        HOST, PORT, dst);
					info_line("Links:", "Err", HOST, PORT,\
					        dst);
				}
				has_links[cats[c]]=1;
				show_link(link, i, dst);
			}
		}
	}	
}


function render_finalise(){

	for(i=1;i<=cnum; i++){
		info_line("_______________", "Err", HOST, PORT, cfiles[category[i,"Name"]]);
		printf("[1|%s|%s|%s|%s]\r\n", "Back to the lawn", ROOTSEL, HOST, PORT ) > cfiles[category[i,"Name"]];
	}
}

function dump_links(){


}