#include "bbs.h"

//extern long Time_limit;
//extern int  ChatFlag,HistorySelect;
//extern int CHATF;
//extern BYTE NOFKeys,OnlineEdit;


extern ULONG SysopStatus;
extern UBYTE NumHistItems,WhichHist;
extern struct TempSysopInfo TSI;
extern long DoHistory, LineHasChanged;

extern int F6;
static void Online_Edit(void)
{
 long temp;
 int t=0;
 temp=User.Time_Limit;
 sprintf(GSTR1,"%sCommands/SysCmd/",Cmds->BBSLoc);
 sprintf(GSTR2,"ACCOUNTS %d",User.Slot_Number);
 if(!CustomCommand(GSTR1,GSTR2,1))
 {t=1;
 EditInfo(User.Slot_Number,&User,&User_keys);
 }
  if(User.Time_Limit!=temp) {
	    if(User.Time_Limit>temp)
		    User.Time_Total=User.Time_Limit;

	    Time_limit=User.Time_Limit-User.Time_Used;
	}

 BytesADL=User.Daily_Bytes_Limit-User.Daily_Bytes_Dld;
 if(t)AEPutStr("\r\nCompleted Edit\r\n");
}


static void DoOnLineEdit(void)
{
 OnlineEdit=1;
 if(Whence_The_Logon>=REMOTE_LOGON)	{
 	IO_Flags[IOFLAG_SER_IN]=0;
 	IO_Flags[IOFLAG_SER_OUT]=0;
	}
 ConPutStr("\014");
 Online_Edit();
 (void)StatPrintUser(&User);
 if(Whence_The_Logon>=REMOTE_LOGON)	{
 	IO_Flags[IOFLAG_SER_IN]=!0;
 	IO_Flags[IOFLAG_SER_OUT]=!0;
	}
 OnlineEdit=0;
}

static void StartASend(void)
{
 int stat;
 char str[100];

 if(Whence_The_Logon>=REMOTE_LOGON)	{
 	IO_Flags[IOFLAG_SER_IN]=0;
	    IO_Flags[IOFLAG_SER_OUT]=0;
	}
 strcpy(str,"");
 asl(str);
 /*
 ConPutStr("\nSend File, path/filename: ");
 stat=LineInput("",str,99,KEYBOARD_TIMEOUT);
 if(stat<0||str[0]=='\0')
 	return;
 */
 if(Whence_The_Logon>=REMOTE_LOGON)	{
 	IO_Flags[IOFLAG_SER_IN]=!0;
	    IO_Flags[IOFLAG_SER_OUT]=!0;
	}
 MenuSend(str);
}


static void StartCapture(void)
{
 extern FILE *CaptureFP;
 int stat;
 char str[100];

 if(CaptureFP) {
	    fclose(CaptureFP);
	    CaptureFP=NULL;
	    ConPutStr("\nCapture closed!\n");
	} else {
Redo:
	    ConPutStr("\nOpen capture, path/filename: ");
	    stat=LineInput("",str,99,KEYBOARD_TIMEOUT);
	    if(stat<0||str[0]=='\0')		return;
	    CaptureFP=fopen(str,"w");
	    if(!CaptureFP) {
		    ConPutStr("ERROR: can't open ");
		    ConPutStr(str);
		    ConPutStr(" for writing!  Try another!\n");
		    goto Redo;
		} else	{
		    ConPutStr("[A[KCapture opened!\n");
		}
	}
}


int CheckCSI(void)
{
 int c,ch;
 F6=0;
 ch=GetConKey(1L);
if((!DoHistory)||NumHistItems==0)
	{
	if((ch>='A')&&(ch<'E')&&!RawArrow) { return(FALSE); }
	}

if(ch=='A')
	{
     if(RawArrow) return(UPARROW);
	HistorySelect--;
	if(HistorySelect<0)
		{
		if(NumHistItems==MAXHIST)
			{
			HistorySelect=MAXHIST-1;
			}
		else
			{
			HistorySelect=0;
			if(LineHasChanged)
				{
				LineHasChanged=0;
				return(HISTORY);
				}
			return(FAILURE);
			}
		}
	return(HISTORY);
	}

if(ch=='B')
	{
     if(RawArrow) return(DOWNARROW);
	HistorySelect++;
	if(NumHistItems!=MAXHIST)
		{
		if(HistorySelect>=WhichHist)
			{
			HistorySelect--;
			if(LineHasChanged)
				{
				LineHasChanged=0;
				return(HISTORY);
				}
			return(FAILURE);
			}
		}
	else
		{
		if(HistorySelect>=MAXHIST)
			{
			HistorySelect=0;
			}
		}
	return(HISTORY);
	}

if(ch=='C'||ch=='D')
	{
       if(RawArrow)
       {
         if(ch=='C')return(LEFTARROW);
         return(RIGHTARROW);
       }
	return(FALSE);
	}

CHATF=0;

 c=' ';

 if(ch=='1')	{
 	c=GetConKey(1L);
	    if(c<='9'&&c>='0') {
 		ch=c;
	    	do {
 			c=GetConKey(1L);
	    		if(c<0)  return(c);
			} while(c!='~'&&c!='v');
/* 11w chg */
/* end 11w  */
		    switch(ch) {
 			case '5':
	    			if(SysopStatus) {
 					User.Sec_Status=TSI.AccessLevel;
	    				User.Sec_Board=TSI.RatioType;
		    			User.Sec_Library=TSI.Ratio;
			    		User.Time_Total=TSI.TimeTotal;
				    	memcpy(User.Conference_Access,TSI.ConfAc,10);
					    (void)StatPrintUser(&User);
					} else {
 					TSI.AccessLevel=User.Sec_Status;
	    				TSI.RatioType=User.Sec_Board;
		    			TSI.Ratio=User.Sec_Library;
			    		TSI.TimeTotal=User.Time_Total;
				    	memcpy(TSI.ConfAc,User.Conference_Access,10);
				     F6=1;
                    	    DoOnLineEdit(); ConvertAccess();
					}
 				SysopStatus=(~SysopStatus);
	    			ConPutStr("\r\nSysop Access ");
		    		ConPutStr((SysopStatus?"Granted\r\n":"Removed\r\n"));
			    	break;
 			case '3':
	    			StartASend();
		    		break;
			}
		    return(0);
		}
	}

 while(c!='~'&&c!='v') {
 	c=GetConKey(1L);
	    if(c<0)  return(c);
	}
if(c=='v')
	{
          if(ch=='0') 
		{
            
		  //GETCLIP=CheckForClip();
		}
	}
	else {
 	if(!NOFKeys) {
 		switch(ch) {
 			case '?': /* Help - ToggleStat */
	    			ToggleStatusDisplay();
		    		break;
			    case '9': /* F10 - FORCE LOGOFF */
				    DropDTR();
 				return(NO_CARRIER);
	    			break;
		    	case '8': /* F9 - SER_OUT */
			    	if(Whence_The_Logon==REMOTE_LOGON)
 					IO_Flags[IOFLAG_SER_OUT]=!IO_Flags[IOFLAG_SER_OUT];
 				break;
	    		case '7': /* F8 - SER_IN */
		    		if(Whence_The_Logon==REMOTE_LOGON)
 					IO_Flags[IOFLAG_SER_IN]=!IO_Flags[IOFLAG_SER_IN];
 				break;
	    		case '6': /* F7 - Toggle Chat bit */
 				if(SySChat==1)			SySChat=0;
	    			else					SySChat=1;
 				StatChatFlag();
	    			break;
 			case '5': /* F6 - Account editing */
                    F6=1;
	    			DoOnLineEdit();
		    		CheckUserOnLine(&User,0); ConvertAccess();F6=0;
			    	break;
// 			case '4': /* F5 - Local Shell */
//		    		break;
		    	case '3':
			    	if(Whence_The_Logon>=REMOTE_LOGON) {
 					IO_Flags[IOFLAG_SER_IN]=0;
	    				IO_Flags[IOFLAG_SER_OUT]=0;
					}
		    		StartCapture();
			    	if(Whence_The_Logon>=REMOTE_LOGON) {
 					IO_Flags[IOFLAG_SER_IN]=!0;
	    				IO_Flags[IOFLAG_SER_OUT]=!0;
					}
		    		break;
	    		case '2': /* F3 - DECREASE TIME LIMIT */
			    	Time_limit-=600L;
				    User.Time_Total-=600L;
 				break;
		    	case '1': /* F2 - INCREASE TIME LIMIT */
			    	Time_limit+=600L;
				    User.Time_Total+=600L;
			    	break;
 			case '0': /* F1 - CHAT TOGGLE */
	    			CHATF=1;
		    		ChatFlag=!ChatFlag;
			    	if(ChatFlag==0)  return(EXITCHAT);
                    SetEnvStat(ENV_CHAT);
				    if(Chat()==NO_CARRIER)		return(NO_CARRIER);
 				return(1);
		    		break;
	    	}
		}
	}

 return(0);
}
