#include "bbs.h"
#include <rexx/storage.h>
#include <clib/rexxsyslib_protos.h>
extern UBYTE ShutDownFlag;
extern struct RexxMsg *SDReplyRexx,*SReplyRexx;


static FILE *debugf = NL;

void DebugOutput(char *s)
{

 if(debugf)	fprintf(debugf,"%s\n",s);
}


void CheckRexxInterface(char *arg1,char *returnstr);

int RexxChatFlag=0;
char RexxChatMsg[255];

int CheckRexxMessage(void)
{
 extern long Time_limit;
 struct RexxMsg *rexxmsg;
 char String[200];
 if(RexxSysBase)
	{
	while((rexxmsg = (struct RexxMsg *) GetMsg((struct MsgPort *) MyRexxPort)))
		{
		if( !strnicmp(rexxmsg->rm_Args[0],"shutdown",8) )
			{
			if(ShutDownFlag!=1)
				{
				SDReplyRexx=rexxmsg;
				ShutDownFlag=1;
                    SetEnvStat(ENV_SHUTDOWN);
				}
			else
				{
				ReplyMsg((struct Message *) rexxmsg);
				}
			if(Whence_The_Logon!=AWAIT_LOGON)
				{
				AEPutStr("\r\n\r\n  The BBS has recieved an emergency shutdown, you have 2 mins to logoff!!\r\n\r\n");
				Time_limit=130;
				}
                 return(SUCCESS);
			}
		if( !strnicmp(rexxmsg->rm_Args[0],"chat",4) )
			{
				SDReplyRexx=rexxmsg;
				RexxChatFlag=1;
                    strcpy(RexxChatMsg,rexxmsg->rm_Args[0]+4);
                    ReplyMsg((struct Message *)rexxmsg);
			if(Whence_The_Logon!=AWAIT_LOGON)
				{
				AEPutStr(RexxChatMsg);
                    AEPutStr("\r\n");
                    RexxChatFlag=0;
				}
			}

		else if( !strnicmp(rexxmsg->rm_Args[0],"suspend",7) )
			{
			if(ShutDownFlag!=2) /* First suspend Notice */
				{
				SReplyRexx=rexxmsg;
				ShutDownFlag=2;
                    SetEnvStat(ENV_SUSPEND);
				}
			else /* Already have a suspend pending! */
				{
/*				if(rexxmsg->rm_Action&RXFF_RESULT)
					{
					rexxmsg->rm_Result1=1;
					rexxmsg->rm_Result2=0;
					}*/
				ReplyMsg((struct Message *) rexxmsg);
				}
			}
		else if( !strnicmp(rexxmsg->rm_Args[0],"resume",6) )
			{
			if(Whence_The_Logon==SUSPEND_LOGON) /* resume as soon as possible */
				{
				ReplyMsg((struct Message *) rexxmsg);
				Whence_The_Logon=AWAIT_LOGON;
				ShutDownFlag=0;
				}
			else /* fail these requests */
				{
				ReplyMsg((struct Message *) rexxmsg);
				}
			}
		else 

			{

CheckRexxInterface(rexxmsg->rm_Args[0],String);
	              rexxmsg->rm_Result1=0;
                   rexxmsg->rm_Result2=(long)CreateArgstring(String,(long)strlen(String));
                ReplyMsg((struct Message *) rexxmsg);
			}
		}
	}
return(SUCCESS);
}




int LineInputConverted(char *atstart, char *tohere, int maxlen,int time_allowed)
{
int c, x;

x=strlen(atstart);
AEPutStr(atstart);
strcpy(tohere,atstart);

FOREVER
	{
	c=Check_Online_Status();
	if(c<0) return(c);
	c=ReadChar((long)time_allowed);
	if(c==NO_CARRIER||c==TIMEOUT) { return(c); }
	if(x<maxlen)
		{
		switch(c)
			{
			case '\r': /*  returns  */
				tohere[x]='\0';
				AEPutStr("\r\n");
				return(x);
			case '\b': /*  backspaces  */
			case '\177':
				if(x) {
					tohere[--x]='\0';
					AEPutStr("\b \b");
				}
				break;
			case '\30': /*  ^X  */
				while(x) {
					AEPutStr("\b \b");
					--x;
				}
				tohere[x]='\0';
				break;
			case '\11': /* tab */
				if(x%5==0)	{
					tohere[x++]=' ';
					SendChar(' ');
				}
				if(x<(maxlen-5)) {
					while(x%5){
						tohere[x++]=' ';
						SendChar(' ');
					}
				}
				break;
			default:
				if(c<' ')		break; /*  control char filter  */
				tohere[x++]=(char)c;
				SendChar('*');
				break;
			}
		}	else {
		    switch(c)	{
			case '\r': /*  returns  */
				tohere[x]='\0';
				AEPutStr("\r\n");
				return(x);
			case '\b': /*  backspaces  */
			case '\177':
				tohere[--x]='\0';
				AEPutStr("\b \b");
				break;
			case '\30': /*  ^X  */
				while(x) {
					AEPutStr("\b \b");
					--x;
				}
				tohere[x]='\0';
				break;
			}
		}
	}
return(SUCCESS);
}

