#include <Global/Main_Global.h>
CRAY WAS HERE!!!!

int DoSCMSG( char *);


BOOL Send_Rexx_Msg(char *,APTR);

BOOL Check_For_Errors(void )
{
  char *Sample_Buffer;
  Sample_Buffer = Allocate_Memory(255);
  
  if(Send_Rexx_Msg("number",Sample_Buffer))
    {
      if(strlen(Sample_Buffer)==0)
        {
         Deallocate_Memory(Sample_Buffer,255);
         return(FALSE);
        }
        else
        {
         Deallocate_Memory(Sample_Buffer,255);
         return(TRUE);
        }
    }
    else
     printf("Trouble Sending AREXX Msg\n");      
  Deallocate_Memory(Sample_Buffer,255);
  return(FALSE);
 
}

BOOL Send_Rexx_Msg(char *Command,APTR Return_Buffer)
{
	int	i;
	struct	MsgPort	*SC_SCMSG;
 	struct	MsgPort	*CRAY;
 	struct	RexxMsg	*RXMsg;
 	BPTR	fh1,fh2;
 	
  if(!(SC_SCMSG = FindPort("SC_SCMSG")))
     {
      fh1 = Open("nil:", MODE_NEWFILE);
      fh2 = Open("nil:", MODE_NEWFILE);
      Execute("run >nil: <nil: sc:c/scmsg",fh1,fh2);
      Close(fh1);
      Close(fh2);
      for(i=0; i<15; i++)
          {
           Delay(20);
           if(SC_SCMSG = FindPort("SC_SCMSG")) break;
          }
      if(!SC_SCMSG)
         {
          printf("Trouble With SCMSG. Is it installed???\n");
          return(FALSE);
         }
     } 	
  if(!(CRAY = FindPort("CRAY.1")))
    {
      printf("Trouble With OUR MsgPort, Is Rexx On??\n");
      return(FALSE);
    }
  if((RXMsg=CreateRexxMsg(CRAY,NULL,"SC_SCMSG")) != NULL)
     {   
      RXMsg->rm_Action  = RXFF_RESULT;
      RXMsg->rm_Args[0] = Command;
      RXMsg->rm_Args[1] = (void *)strlen(Command);
      PutMsg(SC_SCMSG,(struct Message *)RXMsg);
      while(GetMsg(CRAY) == NULL)
         WaitPort(CRAY);
      if(Return_Buffer)
         sprintf(Return_Buffer,"%s",RXMsg->rm_Result2);
      DeleteRexxMsg(RXMsg);
      return(TRUE);
     } 	
     else 
      return(FALSE);
}

void Clear_Previous_Errors(void )
{
  Send_Rexx_Msg("clear",NULL);
  DoMethod(App->Error_List,MUIM_List_Clear,TRUE);
}

void Handle_Errors( void )
{

 struct ListErrorConstructStruct *Error;

 Error = Allocate_Memory(sizeof(struct ListErrorConstructStruct ));
 Error->Error_Text = Allocate_Memory(255);
 Error->Error_Number = Allocate_Memory(10);
 Error->Error_Class = Allocate_Memory(50);
 Error->Line_Number = Allocate_Memory(10);
 while(Check_For_Errors())
  {
   
   Send_Rexx_Msg("text",Error->Error_Text);
   Send_Rexx_Msg("number",Error->Error_Number);
   Send_Rexx_Msg("line",Error->Line_Number);
   Send_Rexx_Msg("class",Error->Error_Class);
   DoMethod(App->Error_List,MUIM_List_InsertSingle,Error,MUIV_List_Insert_Bottom);
   Send_Rexx_Msg("delete",NULL);
  }
 Deallocate_Memory(Error->Line_Number,10);
 Deallocate_Memory(Error->Error_Class,50);
 Deallocate_Memory(Error->Error_Number,10);
 Deallocate_Memory(Error->Error_Text,255);
 Deallocate_Memory(Error,sizeof(struct ListErrorConstructStruct));

}



/*
      sprintf(Buffer,"%s",RXMsg->rm_Result2);
      if(strlen(Buffer)!=0)
         {
         Chris = Allocate_Memory(sizeof(struct ListErrorConstructStruct));
         Chris->Error_File = Allocate_Memory(200);
         Chris->Error_Number = Allocate_Memory(200);
         Chris->Error_Class = Allocate_Memory(200);
         Chris->Error_Text = Allocate_Memory(200);
         Chris->Line_Number = Allocate_Memory(200);
         sprintf(Chris->Error_Number,"%s",RXMsg->rm_Result2);	// number
         RXMsg->rm_Action  = RXFF_RESULT;
         RXMsg->rm_Args[0] = "class";				//class
         RXMsg->rm_Args[1] = (void *)strlen("class");
         PutMsg(Destination,(struct Message *)RXMsg);
         while(GetMsg(Host) == NULL)
               WaitPort(Host);
         sprintf(Chris->Error_Class,"%s",RXMsg->rm_Result2);
         RXMsg->rm_Action  = RXFF_RESULT;
         RXMsg->rm_Args[0] = "class";				//filename
         RXMsg->rm_Args[1] = (void *)strlen("class");
         PutMsg(Destination,(struct Message *)RXMsg);
         while(GetMsg(Host) == NULL)
               WaitPort(Host);
         sprintf(Chris->Error_File,"%s",RXMsg->rm_Result2);
         RXMsg->rm_Action  = RXFF_RESULT;
         RXMsg->rm_Args[0] = "line";
         RXMsg->rm_Args[1] = (void *)strlen("line");
         PutMsg(Destination,(struct Message *)RXMsg);
         while(GetMsg(Host) == NULL)
               WaitPort(Host);
         sprintf(Chris->Line_Number,"%s",RXMsg->rm_Result2);	// line number
         RXMsg->rm_Action  = RXFF_RESULT;
         RXMsg->rm_Args[0] = "text";
         RXMsg->rm_Args[1] = (void *)strlen("text");
         PutMsg(Destination,(struct Message *)RXMsg);
         while(GetMsg(Host) == NULL)
               WaitPort(Host);
         sprintf(Chris->Error_Text,"%s",RXMsg->rm_Result2);	// Error Text
         
         DoMethod(App->Error_List,MUIM_List_InsertSingle,Chris,MUIV_List_Insert_Top);
         
         set(App->Error_List,MUIA_ShowMe,TRUE);
         
         
         }
     if(RXMsg) DeleteRexxMsg(RXMsg);
     }
     
  Deallocate_Memory(Buffer,200);
}

*/


int DoSCMSG(char *line)
{
   struct MsgPort *Their_Port;
   struct MsgPort *Our_Port;
   struct RexxMsg *RXMsg;
   
  
  
   int rc = 0;


   Our_Port = CreateMsgPort();
   if(Our_Port)
      
       
   if((RXMsg=CreateRexxMsg(Our_Port, NULL, "SC_SCMSG")) != NULL)
       
   {
     
      RXMsg->rm_Action = RXFF_RESULT;
      RXMsg->rm_Args[0] = line;
      RXMsg->rm_Args[1] = (void *)strlen(line);
      Their_Port = FindPort("SC_SCMSG");
         PutMsg(Their_Port, (struct Message *)RXMsg);	// Send Our Msg To Rexx
         while( GetMsg(Our_Port) == NULL)
                WaitPort(Our_Port);  
                
   }
   if(RXMsg) DeleteRexxMsg(RXMsg);
   if(Our_Port) DeleteMsgPort(Our_Port);
   
   return(rc);
}
                              
