
/****************************************************************************/
/* Returns character if a key has been hit locally or remotely and responds */
/* to local ctrl/function keys. Does not print character. 					*/
/* Called from functions getkey, msgabort and main_sec						*/
/****************************************************************************/
char inkey()
{
	char ch,str[81],*scrnbuf,x,y,atr;

if(console&CON_L_INPUT && bioskey(1)) {
	ch=getch();
	if(sys_stat&SS_LCHAT && textattrs!=(HIGH|LIGHTGRAY))
		color("WH");
	if(sys_stat&SS_INFOSCRN) {
		if(!ch)
			getch();
		console|=CON_L_ECHO;
		sys_stat&=~SS_INFOSCRN;
		putlch(FF);
		lclini(node_scrnlen-1);
		statusline();
		if(online==ON_REMOTE)
			return(0);
		return(CR);	}
	if(ch)
		return(ch);
	else					/* Alt or Function key hit */
		switch(getch()) {
			case 22:	/* Alt-U  - Runs Uedit local only with user online */
				if(sys_stat&SS_INUEDIT)
					return(0);
                wait(1);
				lclatr(LIGHTGRAY);
				if((scrnbuf=farmalloc((node_scrnlen*80)*2))==0) {
					errormsg(WHERE,"inkey","farmalloc"
						,ltoa((node_scrnlen*80)*2,tmp,10),"N/A");
					return(CR); }
				gettext(1,1,80,node_scrnlen,scrnbuf);
				x=lclwx();
				y=lclwy();
				console&=~(CON_R_ECHO|CON_R_INPUT);
				ch=(sys_stat&SS_TMPSYSOP);
				if(!SYSOP) sys_stat|=SS_TMPSYSOP;
				sys_stat|=SS_INUEDIT;
				useredit();
				sys_stat&=~SS_INUEDIT;
				if(!ch) sys_stat&=~SS_TMPSYSOP;
                puttext(1,1,80,node_scrnlen,scrnbuf);
				farfree(scrnbuf);
				lclxy(x,y);
				statusline();
				combufbot=combuftop=0;
				console|=(CON_R_ECHO|CON_R_INPUT);
				wait(0);
				return(0);
			case 31:	/* Alt-S  - Toggles Spinning Cursor */
				useron.misc^=SPIN;
				return(0);
			case 59:	/* F1	- Toggle Remote echo and input */
				if(online!=ON_REMOTE) return(0);
				if(console&CON_R_ECHO) {
					wait(1);
					console&=~(CON_R_ECHO|CON_R_INPUT);
					putstr("\b\b\b\b\b\b      \b\b\b\b\b\b"); }
				else {
					putstr("      ");
					console|=(CON_R_ECHO|CON_R_INPUT);
					combufbot=combuftop=0;
					wait(0); }
				return(0);
			case 60:	/* F2   - System and User statistics */
				getsysdat();
				now=time(NULL);
				lclini(node_scrnlen);
				lclatr(HIGH|BROWN);
				putlch(FF);
				putls("Alias     : ");
				lclatr(HIGH|LIGHTGRAY);
				lprintf("%-30.30s  ",useron.alias);
				lclatr(CYAN);
				lprintf("Password     : %s\r\n",useron.pass);
				lprintf("Real Name : %-30.30s  Phone Number : %s\r\n"
					,useron.name,useron.phone);
				lprintf("Note      : %-30.30s  Age/Sex/BD   : %2d %c %s\r\n"
					,useron.note,getage(useron.birth),useron.sex
					,useron.birth);
				lprintf("Computer  : %-30.30s  Modem Type   : %s\r\n"
					,useron.comp,useron.modem);
				lprintf("Comment   : %s\r\n",useron.comment);
				lclatr(BLUE);
				lprintf("Last On   : %-8.8s %-5.5s  First On : %-8.8s  "
					,useron.lastond,useron.lastont,useron.firston);
				lprintf("Logons  : %-5u  Today : %-5u\r\n",useron.logons
					,useron.ltoday);
				lprintf("Posts     : %-5u           Today    : %-5u     "
					,useron.posts,useron.ptoday);
				lprintf("Time on : %-5u  Today : %-5u\r\n"
					,useron.timeon,useron.ttoday);
				lprintf("Emails    : %-5u           To Sysop : %-5u     "
					,useron.emails,useron.fbacks);
				lprintf("Waiting : %-5u  Today : %-5u\r\n"
					,getmailw(useron.number),useron.etoday);
				lclatr(GREEN);
				lprintf("Uploads   : %13.13s bytes in %u files\r\n"
					,ultoac(useron.ulb,tmp),useron.uls);
				lprintf("Downloads : %13.13s bytes in %u files\r\n"
					,ultoac(useron.dlb,tmp),useron.dls);
				lprintf("Xfer Pts  : %13.13s\r\n"
					,ultoac(useron.pts,tmp));
				lclatr(CYAN);
				lprintf("Main      : %s  Level: %2.2d\r\n"
					,ltoaf(useron.mf,tmp),useron.ml);
				lprintf("Transfers : %s  Level: %2.2d\r\n"
					,ltoaf(useron.tf,tmp),useron.tl);
				lprintf("Exemption : %s\r\n",ltoaf(useron.exempt,tmp));
				lprintf("Restricts : %s\r\n",ltoaf(useron.rest,tmp));
				lclatr(HIGH|YELLOW);
				putls(" ");
				lclatr(HIGH|LIGHTGRAY);
				putls("This Logon");
				lclatr(HIGH|YELLOW);
				putls("           ");
				lclatr(BLUE);
				lprintf("Time  : %u\r\n",(unsigned)difftime(now,logontime)/60);
				lprintf("Posts     : %13.13s   Email : %-13.13s"
					,ultoac(logon_posts,tmp),ultoac(logon_emails,str));
				lprintf("  To Sysop : %s\r\n",ultoac(logon_fbacks,tmp));
				lclatr(GREEN);
				lprintf("Uploads   : %13.13s bytes in %u files\r\n"
					,ultoac(logon_ulb,tmp),logon_uls);
				lprintf("Downloads : %13.13s bytes in %u files\r\n"
					,ultoac(logon_dlb,tmp),logon_dls);
				lclatr(HIGH|YELLOW);
				putls(" ");
				lclatr(HIGH|LIGHTGRAY);
				putls("System Statistics");
				lclatr(HIGH|YELLOW);
				putls(" \r\n");
				lclatr(BLUE);
				lprintf("Logons    : %13.13s   Total : %s\r\n"
					,ultoac(sys_ltoday,tmp),ultoac(sys_logons,str));
				lprintf("Time on   : %13.13s   Total : %s\r\n"
					,ultoac(sys_ttoday,tmp),ultoac(sys_timeon,str));
				lprintf("Posts     : %13.13s   Email : %-13.13s"
					,ultoac(sys_ptoday,tmp),ultoac(sys_etoday,str));
				lprintf("  To Sysop : %s\r\n",ultoac(sys_ftoday,str));
				lclatr(GREEN);
				lprintf("Uploads   : %13.13s bytes in %s files\r\n"
					,ultoac(sys_ulb,tmp),ultoac(sys_uls,str));
				lprintf("Downloads : %13.13s bytes in %s files"
					,ultoac(sys_dlb,tmp),ultoac(sys_dls,str));
				lclatr(HIGH|LIGHTGRAY);
				putls("       <Hit a key>");
				console&=~CON_L_ECHO;
				sys_stat|=SS_INFOSCRN;
				lclatr(textattrs);
				return(0);
			case 61:	/* F3   - Toggles remote input */
				console^=CON_R_INPUT;
				combuftop=combufbot=0;
				return(0);
			case 63:	/* F5   - Hangs up on user */
				hangup();
				return(0);
			case 65:	/* F7	- Sub Time (60 sec)*/
				starttime-=60;
				return(0);
			case 66:	/* F8	- Add time (60 sec)*/
				starttime+=60;
				return(0);
			case 67:	/* F9	- Temp SysOp */
				sys_stat^=SS_TMPSYSOP;
				statusline();
				return(0);
			case 68: 	/* F10	- Sysop Chat */
				if(sys_stat&SS_LCHAT) {
					sys_stat^=SS_LCHAT;
					return(CR); }
				else {
					sys_stat|=SS_LCHAT;
					SAVELINE;
					localchat();
					return(0); }
			case 71:	/* Home - Statusline #1 */
				statline=1;
				statusline();
				return(0);
			case 72:	/* Up Arrow - decrement statusline */
				if(statline) {
					statline--;
					statusline(); }
				return(0);
			case 79:	/* End		- Last statusline */
				statline=10;
				statusline();
				return(0);
			case 80:	/* Dn Arrow - increment statusline */
				if(statline<10) {
					statline++;
					statusline(); }
				return(0);
			case 93:	/* Shift - F10 - Shell to DOS */
				wait(1);
				lclatr(LIGHTGRAY);
				if((scrnbuf=farmalloc((node_scrnlen*80)*2))==0) {
					errormsg(WHERE,"inkey","farmalloc"
						,ltoa((node_scrnlen*80)*2,tmp,10),"N/A");
					return(CR); }
				gettext(1,1,80,node_scrnlen,scrnbuf);
				x=lclwx();
				y=lclwy();
				lclini(node_scrnlen);
				putlch(FF);
				spawnlp(P_WAIT,getenv("COMSPEC"),NULL);
				lclini(node_scrnlen-1);
				puttext(1,1,80,node_scrnlen,scrnbuf);
				farfree(scrnbuf);
				lclxy(x,y);
				setdisk(node_disk);
				chdir(node_dir);
				statusline();
				combufbot=combuftop=0;
				wait(0);
				return(0);
			case 104: 	/* Alt - F1  Macros	*/
				if(sys_stat&SS_FINPUT)
					return(0);
				sprintf(str,"%sF1.MAC",text_dir);
				if((inputfile=nopen(str,O_RDONLY))!=-1)
					sys_stat|=SS_FINPUT;
				return(0);
			case 105:
            	if(sys_stat&SS_FINPUT)
					return(0);
				sprintf(str,"%sF2.MAC",text_dir);
				if((inputfile=nopen(str,O_RDONLY))!=-1)
					sys_stat|=SS_FINPUT;
				return(0);
			case 106:
            	if(sys_stat&SS_FINPUT)
					return(0);
				sprintf(str,"%sF3.MAC",text_dir);
				if((inputfile=nopen(str,O_RDONLY))!=-1)
					sys_stat|=SS_FINPUT;
				return(0);
			case 107:
            	if(sys_stat&SS_FINPUT)
					return(0);
				sprintf(str,"%sF4.MAC",text_dir);
				if((inputfile=nopen(str,O_RDONLY))!=-1)
					sys_stat|=SS_FINPUT;
				return(0);
			case 108:
            	if(sys_stat&SS_FINPUT)
					return(0);
				sprintf(str,"%sF5.MAC",text_dir);
				if((inputfile=nopen(str,O_RDONLY))!=-1)
					sys_stat|=SS_FINPUT;
				return(0);
			case 109:
            	if(sys_stat&SS_FINPUT)
					return(0);
				sprintf(str,"%sF6.MAC",text_dir);
				if((inputfile=nopen(str,O_RDONLY))!=-1)
					sys_stat|=SS_FINPUT;
				return(0);
			case 110:
            	if(sys_stat&SS_FINPUT)
					return(0);
				sprintf(str,"%sF7.MAC",text_dir);
				if((inputfile=nopen(str,O_RDONLY))!=-1)
					sys_stat|=SS_FINPUT;
				return(0);
			case 111:
            	if(sys_stat&SS_FINPUT)
					return(0);
				sprintf(str,"%sF8.MAC",text_dir);
				if((inputfile=nopen(str,O_RDONLY))!=-1)
					sys_stat|=SS_FINPUT;
				return(0);
			case 112:
            	if(sys_stat&SS_FINPUT)
					return(0);
				sprintf(str,"%sF9.MAC",text_dir);
				if((inputfile=nopen(str,O_RDONLY))!=-1)
					sys_stat|=SS_FINPUT;
				return(0);
			case 113:
            	if(sys_stat&SS_FINPUT)
					return(0);
				sprintf(str,"%sF10.MAC",text_dir);
				if((inputfile=nopen(str,O_RDONLY))!=-1)
					sys_stat|=SS_FINPUT;
				return(0);
				} }
if(console&CON_L_INPUT && sys_stat&SS_FINPUT) {
		if(read(inputfile,&ch,1)!=1) {
			close(inputfile);
			sys_stat^=SS_FINPUT; }
		else return(ch); }
if(console&CON_R_INPUT && combufbot!=combuftop) {
	if(sys_stat&SS_LCHAT && textattrs!=LIGHTGRAY)
		color("");
	return(incom()); }
return(0);
}
