#include <exec/exec.h>
#include <stdio.h>
#include <stdlib.h>
#include "dh1:source/doors/romconf/doorheader.h"
#include "dh0:code/aelib/ae_pragmas.h"
extern struct Library *AEBase;
int LastPos(char *c,char *s);
int Words(char *s);
char *Strip(char *s);
char *Parse(char *s,int which);
void LastCommand(void);
void end(void);
char PASSWORD[200];
char Local[200];
char Shell_Password[200];
char Dir[200];
char PASS[200];
char CliPrompt[200];
char temp[200];
char USER[200];
#define sr StripReturn
int K;
int POS;
FILE *fi;

#define sm sendmessage
#define tr(x) sm(x,1)
#define hk hotkey
#define pm prompt
#define sendstring sendmessage
#define gu getuserstring
#define NOT_EXISTS(x,y) if(!myexists(x,y))
#define ss(x) sendmessage(x,0)
main(int argc,char *argv[])
{
   FILE *fi;
   int nd;
   char image[200];
   PASSWORD[1]='\0';
   if(argc!=2)
   {
     printf("\n");
     printf("/X Shell version 1.0, written by Joseph Hodge\n");
     printf("This is a (XIM) for AmiExpress 2.08+\n");
     printf("\n");
     exit(0);
   }
   Register(argv[1][0]-'0');
   nd=argv[1][0]-'0';
   strcpy(Local,"DOORS:AESHELL/");
   gu(USER,DT_NAME);
   gu(Dir,BB_LOCAL);
   strcpy(Shell_Password,"AIDAN");
   tr(" ");
   ss("Enter Remote Shell Password: ");
   strcpy(PASS,"");
   POS=1;
   while(PASSWORD[0]!=13)
   {
      hk("",PASSWORD);
      if(PASSWORD[0]=='\b')
      {
        if(POS>1)
        {
           ss ("\b \b"); POS=POS-1; PASS[POS-1]='\0';
        }
        else strcpy(PASS,"");
      }
      if(PASSWORD[0]!=13 && PASSWORD[0]!='\b')
      {
         ss("X");
         strcat(PASS,PASSWORD);
         POS +=1;
      }
   }
   tr("");
   if(strcmp(Shell_Password,PASS))
   {
     tr("");
     tr("Remote Password failed");
     ShutDown();
     end();
   }
   tr("");
   sprintf(image,"[32mSearching for [36m[44m%s[40m[33m ",USER);
   ss(image);
   for(K=1;K<7;K++)
   {
     Delay(40L);ss("[33m  . [0m");
   }
   ss("[31mAccess Granted[0m");
   SetCurrentDirName(Dir);
   sprintf(CliPrompt,"[32m%s[33m>[0m",Dir);
   while(1)
   {
     pm(CliPrompt,temp,190);
     strupr(temp);
     strcpy(image,Strip(temp));
     if(image[0]=='\0') continue;
     sprintf(temp,"%s >%sNode%d/Work/ShellOutPut.txt",image,Dir,nd);
     strcpy(image,temp);
     if(!strncmp(image,"ENDCLI",6)) { tr(""); break; }
     Execute(image,NULL,NULL);
     GetCurrentDirName(image,200L);
     sprintf(temp,"%sNode%d/Work/ShellOutPut",Dir,nd);
     showgfile(temp);
     sprintf(CliPrompt,"[32m%s[33m>[0m",image);
   }

   ShutDown();
   end();
}
void LastCommand(void)
{
}
void end(void)
{
  exit(0);
}
char *Parse(char *s,int which)
{
   char Cmd[200];
   char *p;
   register int i;
   strcpy(Cmd,s);
   sr(Cmd);
   i=0;
   p=&Cmd[0];
   while(which)
   {
     if(Cmd[i]==' ' || Cmd[i]=='\0')
     {
        which--;
        if(!which)
        {
           return(p);
        }
        else 
        {
          if(Cmd[i]!='\0')
          {
            p=&Cmd[i+1];
          }
        }
        Cmd[i]='\0';
     }
     i++;
   }
   strcpy(Cmd,"");
   return(Cmd);
}        
char *Strip(char *s)
{
  char Cmd[200];
  register int i;
  char *p;
  sr(s);
  p=s;
  i=0;
  while(*(s+i)==' ') { p++; i++; }
  return(p);
}
int Words(char *s)
{
  register int i;
  register int j;
  j=0;
  i=0;
  while(*(s+i)!='\0')
  {
    if(*(s+i)==' ') j++;
  }
  return(j);
}
int LastPos(char *c,char *s)
{
  register int i;
  register int j;
  j=0;
  i=strlen(s)-1;
  while(i)
  {
    if(!strncmp(s+i,c,strlen(c))) { j=i; break; }
    i--;
  }
  return(j);
}