/***************************************************************************
* God Wars Mud copyright (C) 1994, 1995, 1996 by Richard Woolcock *
* *
* Legend of Chrystancia copyright (C) 1999, 2000, 2001 by Matthew Little *
* This mud is NOT to be copied in whole or in part, or to be run without *
* the permission of Matthew Little. Nobody else has permission to *
* authorise the use of this code. *
***************************************************************************/
#if defined(macintosh)
#include <types.h>
#include <time.h>
#else
#include <sys/types.h>
#include <sys/time.h>
#endif
#include <stdio.h>
#include "merc.h"
/*
* Local functions.
*/
FILE * popen args( ( const char *command, const char *type ) );
int pclose args( ( FILE *stream ) );
char * fgetf args( ( char *s, int n, register FILE *iop ) );
void syspipe args( ( CHAR_DATA *ch, char *argument ) );
#define LOG_DIR "../log/"
void syspipe( CHAR_DATA *ch, char *argument )
{
char buf[32000];
FILE *fp;
fp = popen( argument, "r" );
fgetf( buf, 5000, fp );
send_to_char( buf, ch );
pclose( fp );
return;
}
void do_pipe( CHAR_DATA *ch, char *argument )
{
char buf[5000];
char mac[MAX_STRING_LENGTH];
FILE *fp;
if (IS_CREATOR(ch))
{
fp = popen( argument, "r" );
fgetf( buf, 5000, fp );
sprintf(mac, "\n\r#wExecuting command : #y%s#n\n\r\n\r", argument);
stc(mac, ch);
send_to_char( buf, ch );
pclose( fp );
return;
}
else
{
stc("Huh?\n\r", ch);
return;
}
return;
}
char *fgetf( char *s, int n, register FILE *iop )
{
register int c;
register char *cs;
c = '\0';
cs = s;
while( --n > 0 && (c = getc(iop)) != EOF)
if ((*cs++ = c) == '\0')
break;
*cs = '\0';
return((c == EOF && cs == s) ? NULL : s);
}
void do_pfilescan( CHAR_DATA *ch, char *argument )
{
char arg1[MSL];
char buf[MSL];
char strsave[MSL];
FILE *fp;
argument = one_argument( argument, arg1 );
if (arg1[0] == '\0')
{
send_to_char("syntax:\n\r",ch);
send_to_char("pscan <all> <Searchstring>\n\r",ch);
send_to_char("pscan <Player> <Searchstring> \n\r",ch);
return;
}
if (!str_cmp(arg1,"all"))
{
if (argument[0] == '\0')
{
send_to_char("Search for what?\n\r",ch);
return;
}
sprintf(buf, "grep -i \"%s\" %s*", argument, PLAYER_DIR);
syspipe( ch, buf );
send_to_char("\n\rSearch Complete.\n\r",ch);
return;
}
else
{
if (argument[0] == '\0')
{
send_to_char("Search for what?\n\r",ch);
return;
}
sprintf( strsave, "%s%s", PLAYER_DIR, capitalize( arg1 ) );
if ( ( fp = fopen( strsave, "r" ) ) == NULL )
{
send_to_char("\n\rCharacter File Not Found\n\r",ch);
return;
}
else
{
sprintf(buf, "grep -i \"%s\" %s%s", argument, PLAYER_DIR, capitalize( arg1 ));
syspipe( ch, buf );
send_to_char("\n\rSearch Complete.\n\r",ch);
fclose( fp );
return;
}
}
return;
}
void do_logscan( CHAR_DATA *ch, char *argument )
{
char arg1[MSL];
char buf[MSL];
char strsave[MSL];
FILE *fp;
argument = one_argument( argument, arg1 );
if (arg1[0] == '\0')
{
send_to_char("syntax:\n\r",ch);
send_to_char("lscan list\n\r",ch);
send_to_char("lscan <Logfile> <Searchstring> \n\r",ch);
return;
}
if (!str_cmp(arg1,"list"))
{
sprintf( buf, "ls %s", LOG_DIR);
syspipe( ch, buf );
send_to_char("\n\rOK.\n\r",ch);
return;
}
else if (!str_cmp(arg1,"all"))
{
if (argument[0] == '\0')
{
send_to_char("Search for what?\n\r",ch);
return;
}
sprintf(buf, "grep -i \"%s\" %s*", argument, LOG_DIR);
syspipe( ch, buf );
send_to_char("\n\rSearch Complete.\n\r",ch);
return;
}
else
{
if (argument[0] == '\0')
{
send_to_char("Search for what?\n\r",ch);
return;
}
sprintf( strsave, "%s%s", LOG_DIR, arg1 );
if ( ( fp = fopen( strsave, "r" ) ) == NULL )
{
send_to_char("\n\rLog File Not Found.\n\r",ch);
return;
}
else
{
sprintf(buf, "grep -i \"%s\" %s%s", argument, LOG_DIR, arg1);
syspipe(ch,buf);
send_to_char("\n\rOK.\n\r",ch);
fclose( fp );
return;
}
}
return;
}