AwakeMUD-0.6Beta/doc/
AwakeMUD-0.6Beta/lib/
AwakeMUD-0.6Beta/lib/etc/
AwakeMUD-0.6Beta/lib/etc/pfiles/
AwakeMUD-0.6Beta/lib/fixer_data/
AwakeMUD-0.6Beta/lib/misc/
AwakeMUD-0.6Beta/lib/plrobjs/
AwakeMUD-0.6Beta/lib/plrobjs/A-E/
AwakeMUD-0.6Beta/lib/plrobjs/F-J/
AwakeMUD-0.6Beta/lib/plrobjs/K-O/
AwakeMUD-0.6Beta/lib/plrobjs/U-Z/
AwakeMUD-0.6Beta/lib/plrspells/A-E/
AwakeMUD-0.6Beta/lib/plrspells/F-J/
AwakeMUD-0.6Beta/lib/plrtext/A-E/
AwakeMUD-0.6Beta/lib/world/
AwakeMUD-0.6Beta/lib/world/mob/
AwakeMUD-0.6Beta/lib/world/obj/
AwakeMUD-0.6Beta/lib/world/qst/
AwakeMUD-0.6Beta/lib/world/shp/
AwakeMUD-0.6Beta/lib/world/wld/
AwakeMUD-0.6Beta/lib/world/zon/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <ctype.h>

#include "awake.h"

#define MEM_STRING_LENGTH 3000000

int replace_string( char *oldstring, char *xbuf, char *buf2, char *buf3 )
{
  int i;
  char *p;
  char *q;
  int sl2, sl3;
  int ret;

  sl2 = strlen(buf2);
  sl3 = strlen(buf3);

  q = oldstring;
  ret = 0;
  while ( ( p = strstr( q, buf2 ) ) )
    {
      ret++;
      i = p - oldstring;
      strncpy( xbuf, oldstring, i+1 );
      xbuf[i]=0;
      strcat(xbuf,buf3);
      strcat(xbuf,&oldstring[i+strlen(buf2)]);
      strcpy(oldstring, xbuf );
      q = oldstring + i + 1;
    }
  return ret;
}
#if 0
char *replace_string( char *buf, char *xbuf )
{
  int i;
  int depth;
  char *arg;
  
  if ( ( arg = strstr( buf, "->pcdata->class" ) ) == NULL )
    return NULL;
  
  while ( *arg == '-'
	 || *arg == '>' )
    arg--;
  
  while ( isalpha( *arg ) )
    arg--;
  arg++;
  
  strcpy( xbuf, buf );
  i = strlen( buf ) - strlen( arg );
  xbuf[i] = 0;
  strcat( xbuf, "GET_LEVEL( " );
  i = strlen( xbuf );
  while ( isalpha( *arg ) )
    {
      xbuf[i] = *arg;
      i++;
      arg++;
    }
  xbuf[i] = 0;

  strcat( xbuf, ", " );
  i = strlen( xbuf );

  while( *arg != '[' )
    arg++;
  arg++;

  depth = 0;
  while( *arg )
    {
      if ( *arg == '[' )
	depth++;
      if ( *arg == ']' )
	{
	  if ( depth == 0 )
	    break;
	  depth--;
	}
      xbuf[i] = *arg;
      i++;
      arg++;
    }
  arg++;
  xbuf[i] = 0;
  strcat( xbuf, " )" );
  
  strcat( xbuf, arg );
  strcpy( buf, xbuf );
  return buf;
}
#endif

int main( int argc, char **argv )
{
  FILE *in;
  char buf[MEM_STRING_LENGTH];
  char xbuf[MEM_STRING_LENGTH+50000];
  int i;
  int match;
  int len;
  char ostr[5000];
  char nstr[5000];
  char cstr[5000];
  char chancestring[30];

  srand48(time(NULL));

  if ( argc <= 1 )
    {
      fprintf( stderr, "Syntax: %s file1 file2 ...\n", argv[0] );
      exit ( 1 );
    }

  printf("String to replace:\n");
  strcpy(ostr,"");
  while( fgets(buf, 1000, stdin) != NULL )
    {
      if (!strcmp(buf,"-EOF-\n"))
	break;
      strcat(ostr, buf);
    }
  if (!*ostr)
    {
      fprintf( stderr, "No string to replace.\n" );
      exit ( 1 );
    }
  if ( ostr[strlen(ostr)-1] == '\n' )
    ostr[strlen(ostr)-1] = 0;

  printf("String to replace with:\n");
  
  strcpy(nstr,"");
  while( fgets(buf, 1000, stdin) != NULL )
    {
      if (!strcmp(buf,"-EOF-\n"))
	break;
      strcat(nstr, buf);
    }
  if (!*nstr)
    {
      fprintf( stderr, "No replacement string.\n" );
      exit ( 1 );
    }
  if ( nstr[strlen(nstr)-1] == '\n' )
    nstr[strlen(nstr)-1] = 0;
  
  strcpy( cstr, nstr );
  for ( i = 1; i < argc; i++ )
    {
      strcpy( nstr, cstr );
      sprintf( chancestring, "%ld", lrand48()%10000);
      replace_string( nstr, xbuf, "RANDNUM", chancestring );

      printf( "Checking %-10s", argv[i] );
      fflush( stdout );
      if ( ( in = fopen( argv[i], "r" ) ) == NULL )
	{
	  fprintf( stderr, "Could not open file: %s\n", argv[i] );
	  continue;
	}
      len = fread( buf, sizeof( char ), MEM_STRING_LENGTH, in );
      if ( len <= 0 )
	{
	  fprintf( stderr, "Length of %d for %s.\n", len, argv[i] );
	  len = 0;
	}
      if ( len == MEM_STRING_LENGTH )
	{
	  fprintf( stderr, "Length of %d for %s.\n", len, argv[i] );
	  fprintf( stderr, "SKIPPING.\n" );
	  continue;
	}
      buf[len] = 0;
      fclose( in );
      match = 0;
      match = replace_string( buf, xbuf, ostr, nstr );

      if ( match <= 0 )
	{
	  printf( " - No matches.  Skipping.\n" );
	  continue;
	}

      printf( " - %d matches.\n", match );

      in = fopen( argv[i], "w" );
      fprintf( in, "%s", buf );
      fclose( in );
    }
  return 0;
}