#include "bbsc12.h"

char menubuf[1024], xmenubuf[64];
int menu_items;

checkoption(menubuf, xmenubuf, menu,menustr,priv,menu_items)
char    menubuf[];
char	xmenubuf[];
char	menu[];
char	menustr[];
int	priv;
int 	*menu_items;
{
	
	
	if(user_priv >= priv) {
		strcat(menubuf, menustr);
		if(*menu_items!=0)
			strcat(xmenubuf, ",");
		strcat(xmenubuf, menu);
		
		(*menu_items)++;
		if((*menu_items % 4) == 0) 
			strcat(menubuf, "\n\r");
		
	}
}

bbsmenu(type, aid)
int type, aid;
{
	menubuf[0]='\0';
	xmenubuf[0]='\0';
	menu_items = 0;
	switch(type) {
		case(1):
			checkoption(menubuf, xmenubuf, "M",
				"M(essage section), ", mpMS, &menu_items);
			checkoption(menubuf, xmenubuf, "F",
				"F(ile section),    ", mpE, &menu_items);
			checkoption(menubuf, xmenubuf, "V",
				"V(ersion),         ", 1, &menu_items);
			checkoption(menubuf, xmenubuf, "H",
				"H(umor),           ", mpH, &menu_items);
			checkoption(menubuf, xmenubuf, "T",
				"T(oggle page),     ", mpT, &menu_items);
			checkoption(menubuf, xmenubuf, "B",
				"B(ulletins),       ", mpB, &menu_items);
			checkoption(menubuf, xmenubuf, "A",
				"A(dditional),      ", mpA, &menu_items);
			checkoption(menubuf, xmenubuf, "N",
				"N(ew user msg),    ", mpN, &menu_items);
			checkoption(menubuf, xmenubuf, "X",
				"e(X)pert toggle,   ", mpX, &menu_items);
			checkoption(menubuf, xmenubuf, "W",
				"W(elcome message), ", mpW, &menu_items);
			checkoption(menubuf, xmenubuf, "D",
				"D(aily info),      ", mpD, &menu_items);
			checkoption(menubuf, xmenubuf, "U",
				"U(nix),            ", mpU, &menu_items);
			checkoption(menubuf, xmenubuf, "R",
				"R(ead files),      ", mpRF, &menu_items);
			checkoption(menubuf, xmenubuf, "P",
				"P(assword change), ", mpP, &menu_items);
			checkoption(menubuf, xmenubuf, "C",
				"C(hat request),    ", mpCHAT, &menu_items);
			checkoption(menubuf, xmenubuf, "Q",
				"Q(uestionaire),    ", mpQUEST, &menu_items);
			checkoption(menubuf, xmenubuf, "Z",
				"Z(ip mail),        ", mpY, &menu_items);
			checkoption(menubuf, xmenubuf, "O",
				"c(O)nference,      ", mpCONF, &menu_items);
			checkoption(menubuf, xmenubuf, "E",
				"in conferenc(E),   ", mpCONF, &menu_items);
			checkoption(menubuf, xmenubuf, "L",
				"L(ogged on),       ", mpL, &menu_items);
			checkoption(menubuf, xmenubuf, "G",
				"G(oodbye),         ", mpG, &menu_items);
			checkoption(menubuf, xmenubuf, "S",
				"u(S)enet access,   ", mpUSENET, &menu_items);
			checkoption(menubuf, xmenubuf, "I",
				"s(I)g access,      ", 1, &menu_items);
			checkoption(menubuf, xmenubuf, " or ? ",
				"? --- help.        ", mpZ, &menu_items);
			break;

		case (2):
			checkoption(menubuf, xmenubuf, "A",
				"A(rea change),     ", 1, &menu_items);
			checkoption(menubuf, xmenubuf, "K",
				"K(ill message),    ", aid, &menu_items);
			checkoption(menubuf, xmenubuf, "Q",
				"Q(uick scan),      ", mpQ, &menu_items);
			checkoption(menubuf, xmenubuf, "S",
				"S(can messages),   ", mpS, &menu_items);
			checkoption(menubuf, xmenubuf, "R",
				"R(ead messages),   ", mpR, &menu_items);
			checkoption(menubuf, xmenubuf, "Y",
				"Y(our messages),   ", mpY, &menu_items);
			checkoption(menubuf, xmenubuf, "C",
				"C(heck messages),  ", mpC, &menu_items);
			checkoption(menubuf, xmenubuf, "E",
				"E(nter messages),  ", mpE, &menu_items);
			checkoption(menubuf, xmenubuf, "N",
				"e(N)ter blocked,   ", mpE, &menu_items);
			if( !sigreturn)
				checkoption(menubuf, xmenubuf, "M",
					"M(ain menu),       ", 1, &menu_items);
			else
				checkoption(menubuf, xmenubuf, "M",
					"M(ain SIG menu),   ", 1, &menu_items);
			checkoption(menubuf, xmenubuf, "G",
				"G(oodbye),         ", mpG, &menu_items);
			checkoption(menubuf, xmenubuf, "X",
				"e(X)pert toggle,   ", mpX, &menu_items);
			checkoption(menubuf, xmenubuf, "B",
				"B(atch read sel),  ", mpR, &menu_items);
			checkoption(menubuf, xmenubuf, "T",
				"T(oggle page),     ", mpT, &menu_items);
			checkoption(menubuf, xmenubuf, " or ? ",
				"? --- help.        ", mpZ, &menu_items);
			break;


		case (3):

			checkoption(menubuf, xmenubuf, "A",
				"A(rea change),     ", 1, &menu_items);
			if( !sigreturn)
				checkoption(menubuf, xmenubuf, "M",
					"M(ain menu),       ", 1, &menu_items);
			else
				checkoption(menubuf, xmenubuf, "M",
					"M(ain SIG menu),   ", 1, &menu_items);
			checkoption(menubuf, xmenubuf, "U",
				"U(pload),          ", fpU, &menu_items);
			checkoption(menubuf, xmenubuf, "D",
				"D(ownload),        ", fpD, &menu_items);
			checkoption(menubuf, xmenubuf, "F",
				"F(ile list),       ", fpL, &menu_items);
			checkoption(menubuf, xmenubuf, "R",
				"R(aw list),        ", fpR, &menu_items);
			checkoption(menubuf, xmenubuf, "N",
				"N(ew file list),   ", fpL, &menu_items);
			checkoption(menubuf, xmenubuf, "Z",
				"Z(ip file menu)    ", fpL, &menu_items);
			checkoption(menubuf, xmenubuf, "L",
				"L(ocate files),    ", fpL, &menu_items);
			checkoption(menubuf, xmenubuf, "C",
				"C(ontent of),      ", fpL, &menu_items);
			checkoption(menubuf, xmenubuf, "X",
				"e(X)pert toggle,   ", mpX, &menu_items);
			checkoption(menubuf, xmenubuf, "T",
				"T(oggle page),     ", mpT, &menu_items);
			checkoption(menubuf, xmenubuf, "G",
				"G(oodbye),         ", mpG, &menu_items);
			checkoption(menubuf, xmenubuf, "S",
				"S(ummary of dir),  ", mpG, &menu_items);
			checkoption(menubuf, xmenubuf, " or ? ",
				"? --- help.        ", mpZ, &menu_items);
			break;
		case (4):
			checkoption(menubuf, xmenubuf, "M",
				"M(essage section), ", mpMS, &menu_items);
			checkoption(menubuf, xmenubuf, "F",
				"F(ile section),    ", mpE, &menu_items);
			checkoption(menubuf, xmenubuf, "A",
				"A(dditional),      ", mpA, &menu_items);
			checkoption(menubuf, xmenubuf, "L",
				"L(eave SIGs),      ", 1, &menu_items);
			checkoption(menubuf, xmenubuf, "X",
				"e(X)pert toggle,   ", mpX, &menu_items);
			checkoption(menubuf, xmenubuf, "T",
				"T(oggle page),     ", mpT, &menu_items);
			checkoption(menubuf, xmenubuf, "G",
				"G(oodbye),         ", mpG, &menu_items);
			checkoption(menubuf, xmenubuf, " or ? ",
				"? --- help.        ", mpZ, &menu_items);
			break;
		case (5):
			checkoption(menubuf, xmenubuf, "F",
				"F(ile list),       ", fpL, &menu_items);
			checkoption(menubuf, xmenubuf, "R",
				"R(aw list),        ", fpR, &menu_items);
			checkoption(menubuf, xmenubuf, "N",
				"N(ew file list),   ", fpL, &menu_items);
			checkoption(menubuf, xmenubuf, "L",
				"L(ocate files)     ", fpL, &menu_items);
			break;
		default:
			return;

		}
		if(type == 5)
			strcat(menubuf, "\n\r");
		else
			strcat(menubuf, "\n\r\n\r");
		if(!xpert) {
			portsout(CRLF);
			portsout(menubuf);
		}
		portsout("Commands: ");
		portsout(xmenubuf);
		portsout("===> ");
}
