menu_bbslist()
{
	FILE *fi;
	char s[MAXLINE];
	char outstr[80];
	static int lo, hi;
	char pattern[20];
	int i;

	printmenu(1);
	while (1) {
		colour(2);
		printf("\nBBS Lists (?=menu, ");
		if (!bbslst_bad){
			printf("[%d-%d] ) ",lo,hi);
		}
		else{
			printf("[*-*]) ");
		}
		colour(4);
		strcpy(outstr,"?");
		readf("A",outstr,KEYWAIT);
		colour(0);
		nl();
		switch(outstr[0]) {
			case '?':
				printmenu(1);
				break;
			case '0':
			case 'r':
			case 'R':
				range(&lo,&hi,BBSLST_LO,BBSLST_HI);
				break;

			case '1':
			case 's':
			case 'S':
				if (bbslst_bad){
					range(&lo,&hi,BBSLST_LO,BBSLST_HI);
				}
				colour(2);
				printf("Search pattern :");
				colour(4);
				strcpy(outstr,"");
				readf("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",outstr,KEYWAIT);
				colour(0);
				nl();
				sprintf(pattern,"%s",outstr);
				sprintf(s,"  Range [%d-%d], Pattern \"%s\"\n",lo,hi,pattern);
				logtosysop(s);

				for(i=lo;i<=hi;i++){
					sprintf(s,"%sbbslist.%d",data,i);
					if (mykbhit()){
						purgkey();
						break;
					}
					if ( (fi=fopen(s,"r")) == NULL){
						colour(6);
						printf("< No bbslist.%d >\n",i);
						colour(0);
					}
					else{
						colour(3);
						printf("< Searching bbslist.%d >\n",i,i);
						colour(0);
						find(fi,stdout,pattern);
						fclose(fi);
					}
				}
				break;


			case '2':
			case 'l':
			case 'L':
				colour(2);
				nl();
				printf("Search pattern :");
				colour(4);
				strcpy(outstr,"");
				readf("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",outstr,KEYWAIT);
				colour(0);
				nl();
				sprintf(pattern,"%s",outstr);
				sprintf(s,"  Local, Pattern \"%s\"\n",pattern);
				logtosysop(s);
				sprintf(s,"%sbbslist.msg",gfiles,i);
				if ( (fi=fopen(s,"r")) == NULL){
					colour(6);
					printf("< No bbslist.msg >\n");
					colour(0);
				}
				else{
					colour(3);
					printf("< Searching bbslist.msg >\n");
					colour(0);
					find(fi,stdout,pattern);
					fclose(fi);
				}
				break;

			case 'q':
			case 'Q': return(0);
		}
	}
}

menu_connect()
{
	FILE *fi;
	char s[MAXLINE];
	char outstr[80];
	static int lo, hi;
	char pattern[20];
	int i;

	printmenu(2);
	while (1) {
		colour(2);
		printf("\nConnections (?=menu, ");
		if (!conlst_bad){
			printf("[%d-%d] ) ",lo,hi);
		}
		else{
			printf("[*-*]) ");
		}
		colour(4);
		strcpy(outstr,"?");
		readf("A",outstr,KEYWAIT);
		colour(0);
		nl();
		switch(outstr[0]) {
			case '?':
				printmenu(2);
				break;
			case '0':
			case 'r':
			case 'R':
				range(&lo,&hi,CONLST_LO,CONLST_HI);
				break;

			case '1':
			case 's':
			case 'S':
				if (conlst_bad){
					range(&lo,&hi,CONLST_LO,CONLST_HI);
				}
				colour(2);
				nl();
				printf("Search pattern :");
				colour(4);
				strcpy(outstr,"");
				readf("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",outstr,KEYWAIT);
				colour(0);
				nl();
				sprintf(pattern,"%s",outstr);
				sprintf(s,"  Range [%d-%d], Pattern \"%s\"\n",lo,hi,pattern);
				logtosysop(s);
				for(i=lo;i<=hi;i++){
					sprintf(s,"%sconnect.%d",data,i);
					if (mykbhit()){
						purgkey();
						break;
					}
					if ( (fi=fopen(s,"r")) == NULL){
						colour(6);
						printf("< No connect.%d >\n",i);
						colour(0);
					}
					else{
						colour(3);
						printf("< Searching connect.%d >\n",i);
						colour(0);
						find(fi,stdout,pattern);
						fclose(fi);
					}
				}
				break;


			case 'q':
			case 'Q': return(0);
		}
	}
}

menu_netdat()
{
	FILE *fi;
	char s[MAXLINE];
	char outstr[80];
	static int lo, hi;
	char pattern[20];
	int i;

	printmenu(3);
	while (1) {
		colour(2);
		printf("\nNetdats (?=menu, ");
		if (!netlst_bad){
			printf("[%d-%d] ) ",lo,hi);
		}
		else{
			printf("[*-*]) ");
		}
		colour(4);
		strcpy(outstr,"?");
		readf("A",outstr,KEYWAIT);
		colour(0);
		nl();
		switch(outstr[0]) {
			case '?':
				printmenu(3);
				break;
			case '0':
				sprintf(s,"%s\\netdat0.log",gfiles);
				type(s,BREAKON);
				logtosysop("  Viewed 0\n");
				break;

			case '1':
				sprintf(s,"%s\\netdat1.log",gfiles);
				type(s,BREAKON);
				logtosysop("  Viewed 2\n");
				break;

			case '2':
				sprintf(s,"%s\\netdat2.log",gfiles);
				type(s,BREAKON);
				logtosysop("  Viewed 3\n");
				break;

			case '3':
			case 'r':
			case 'R':
				range(&lo,&hi,NETLST_LO,NETLST_HI);
				break;

			case '4':
			case 's':
			case 'S':
				if (netlst_bad){
					range(&lo,&hi,NETLST_LO,NETLST_HI);
				}
				colour(2);
				nl();
				printf("Search pattern :");
				colour(4);
				strcpy(outstr,"");
				readf("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",outstr,KEYWAIT);
				colour(0);
				nl();
				sprintf(pattern,"%s",outstr);
				sprintf(s,"  Range [%d-%d], Pattern \"%s\"\n",lo,hi,pattern);
				logtosysop(s);
				for(i=lo;i<=hi;i++){
					sprintf(s,"%snetdat%d.log",gfiles,i);
					if (mykbhit()){
						purgkey();
						break;
					}
					if ( (fi=fopen(s,"r")) == NULL){
						colour(6);
						printf("< No netdat%d.log >\n",i);
						colour(0);
					}
					else{
						colour(3);
						printf("< Searching netdat%d.log >\n",i);
						colour(0);
						find(fi,stdout,pattern);
						fclose(fi);
					}
				}
				break;


			case '5':
			case 'n':
			case 'N':
				colour(2);
				nl();
				printf("Search pattern :");
				colour(4);
				strcpy(outstr,"");
				readf("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",outstr,KEYWAIT);
				colour(0);
				nl();
				sprintf(pattern,"%s",outstr);
				sprintf(s,"  NET.LOG, Pattern \"%s\"\n",pattern);
				logtosysop(s);
				sprintf(s,"%snet.log",gfiles);
				if ( (fi=fopen(s,"r")) == NULL){
					colour(6);
					printf("< No net.log >\n",i);
					colour(0);
				}
				else{
					colour(3);
					printf("< Searching net.log >\n");
					colour(0);
					find(fi,stdout,pattern);
					fclose(fi);
				}
				break;
		
			case 'q':
			case 'Q': return(0);
		}
	}
}

menu_subs()
{
	FILE *fi;
	char s[MAXLINE];
	char outstr[80];
	static int lo, hi;
	char pattern[20];
	int i;

	printmenu(4);
	while (1) {
		colour(2);
		printf("\nSUBS Lists (?=menu, ");
		if (!sublst_bad){
			printf("[%d-%d] ) ",lo,hi);
		}
		else{
			printf("[*-*]) ");
		}
		colour(4);
		strcpy(outstr,"?");
		readf("A",outstr,KEYWAIT);
		colour(0);
		nl();
		switch(outstr[0]) {
			case '?':
				printmenu(4);
				break;
			case '0':
			case 'r':
			case 'R':
				range(&lo,&hi,SUBLST_LO,SUBLST_HI);
				break;

			case '1':
			case 's':
			case 'S':
				if (sublst_bad){
					range(&lo,&hi,SUBLST_LO,SUBLST_HI);
				}
				colour(2);
				printf("Search pattern :");
				colour(4);
				strcpy(outstr,"");
				readf("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",outstr,KEYWAIT);
				colour(0);
				nl();
				sprintf(pattern,"%s",outstr);
				sprintf(s,"  Range [%d-%d], Pattern \"%s\"\n",lo,hi,pattern);
				logtosysop(s);

				/* Hack in subs.lst for subs.0 */
				for(i=lo;i<=hi;i++){
					sprintf(s,"%ssubs.%d",data,i);
					if (i==0){
						sprintf(s,"%ssubs.lst",data);
					}
					if (mykbhit()){
						purgkey();
						break;
					}
					if ( (fi=fopen(s,"r")) == NULL){
						colour(6);
						printf("< No %s >\n",s);
						colour(0);
					}
					else{
						colour(3);
						if(i==0){
							printf("< Searching subs.lst >\n",i);
						}
						else{
							printf("< Searching subs.%d >\n",i);
						}
						colour(0);
						find(fi,stdout,pattern);
						fclose(fi);
					}
				}
				break;


			case 'q':
			case 'Q': return(0);
		}
	}
}
