#include "chat.h"
#include <libraries/dos.h>

extern int LocalLog;
extern struct MsgPort *port;
extern struct MsgPort *replymp;
extern struct JHMessage *Jhmsg,*msg;

extern enum MainArg mainarg;

extern struct MsgPort *myport, *repport, *otport[NODENUM];
extern struct MSMes mymes, mesbuf, *otmes;

extern FILE *str;
extern char mynm[NAMELEN], otnm[NODENUM][NAMELEN], fname[100], mainline[100];
extern char myportnm[10], repportnm[20];
extern char dispbuf[100], inkey[100];
extern int i, j, in, mynd, dnd, col, otno, inpt, elnfl, nmfl;

disp( s, rnd )
char *s;
{
int i, j, sp;
char tmp[100];

 i = 0;
 if( dnd != rnd ) {
  newln( rnd );
  if( s[i] == CR ) i++;
 };
 tmp[1] = 0;
 for( ; s[i]; i++ ) {
  tmp[0] = s[i];
  if( tmp[0] >= ' ' ) {
   if( col >= 79 ) {
    if( tmp[0] == ' ' ) { 
     cr();
     col = 0;
     nmfl = 0; 
     continue;
    };
    for( j = 78; dispbuf[j] != ' ' && j; j-- );
    sp = j;
    if( sp > 49 ) {
     bsn( 79 - sp );
     cr(); 
     while( dispbuf[sp] == ' ' && sp < 79 ) sp++;
     dispbuf[79] = 0;
     sm0( &dispbuf[sp] );
     col = 79 - sp;
     nmfl = 0; 
     sm0( tmp );
     dispbuf[col++] = tmp[0];
    }
    else {
     cr(); col = 0; nmfl = 0;
     sm0( tmp );
     dispbuf[col++] = tmp[0];
    };
   } 
   else {
    sm0( tmp );
    dispbuf[col++] = tmp[0];
   };
  }
  else switch( tmp[0] ) {
   case BS: if( col == nmfl ) continue;
   bs(); col--; break;
   case CR: cr(); col = 0; nmfl = 0; break;
   case FF: col = 0; nmfl = 0; sm0( tmp ); break;
   case BELL: sm0( tmp ); break;
  }
 };
 return(0);
}

prlx( l )
long l;
{
char temp[124];
 sprintf( temp, "%lX", l ); sm1( temp );
 return(0);
}

listother()
{
int i;
char tmp[100];

  cr();
  switch( otno ) {
   case 0: sm1( "The Chat Room is[32m:[36m Empty![0m" ); break;
   case 1: sm2( "There Is [36m1[0m User In The Chat Room[32m:[0m" ); break;
   default:
    sprintf( tmp, "There Are [36m%d[0m Users In The Chat Room[32m:[0m ", otno );
    sm2( tmp ); 
  };
  for( i = 0; i < NODENUM; i++ ) {
   if( otport[i] == 0 ) continue;
   sm0( " " );
   sm1( otnm[i] );
  };
  cr();
  return(0);
}

MSCloseOut()
{
  putuserstring( "\tExited AEChat\n",BB_CALLERSLOG);
  ShutDown();
  end();
  return(0);
}


parsemain()
{
int i, len;

  len = strlen( mainline );
  for( i = len-1; mainline[i] == ' '; i-- ) mainline[i] = 0; 
  for( i = 0; mainline[i] == ' '; i++ );
  for( ; mainline[i] != ' ' && i < len; i++ );
  if( i == len ) return( NONE );
  for( ; mainline[i] == ' '; i++ );
  if( i == len ) return( NONE );
  if( stricmp( &mainline[i], "ON" ) == 0 ) return( ON );
  if( stricmp( &mainline[i], "OFF" ) == 0 ) return( OFF );
  return( ERR );
}

chatoff()
{
  sprintf( fname, "env:STATUS@%d", mynd );
  str = fopen( fname,"w" );
  if( str != NULL ) {
   cr();
   sm2( "[36m<[0mChat Requests From Other Nodes Will Be Denied![36m>[0m" );
  };
  if( str == NULL ) return( 1 );
  fclose( str );
  CloseOut();
  return(0);
}

chaton()
{
  sprintf( fname, "env:STATUS@%d", mynd );
  remove( fname );
  cr();
  sm2( "[36m<[0mChat Requests From Other Nodes Will Be Accepted[36m>[0m" );
  CloseOut();
  return(0);
}

chathelp()
{
  cr();
  sm2( "[32mUsage[33m:[0m CHAT [36m[[0mON [36m|[0m OFF[36m][0m" );
  return(0);
}
