tinymush-3.1p2/game/backups/
tinymush-3.1p2/game/bin/
tinymush-3.1p2/game/data/
tinymush-3.1p2/game/modules/
tinymush-3.1p2/game/modules/old/
tinymush-3.1p2/src/modules/comsys/
tinymush-3.1p2/src/modules/hello/
tinymush-3.1p2/src/modules/mail/
tinymush-3.1p2/src/tools/
/*  logwatch.c - A very basic log watcher */
/* $Id: logwatch.c,v 1.1 2004/10/12 19:42:53 tyrspace Exp $ */

#include "copyright.h"
#include "autoconf.h"

extern char *optarg;

int main(argc, argv)
int argc;
char *argv[];
{
    char *searchstr = (char *) NULL;
    char *logfile = (char *) NULL;
    char *s = (char *) NULL;
    FILE *fptr;
    int c=0, delay=0, timeout=30;
    long pos=0, newpos;
    
	/* Parse the command line */

    while ((c = getopt(argc, argv, "s:l:t:")) != -1) {
        switch(c) {
        case 's':
        	searchstr = optarg;
        	break;
        case 'l':
        	logfile = optarg;
        	break;
        case 't':
        	timeout = atoi(optarg);
        	if (timeout < 1) {
        	    fprintf( stderr, "Warning - Invalid timeout specified.\n"\
        	                     "Using default value of 30 seconds\n");
        	    timeout = 30;
        	}
        	break;
        }
    
    }
    
	/* Die if we don't have everything we need */

    if ( (searchstr == (char *) NULL ) || (logfile == (char *) NULL ) ) {
    	fprintf( stderr, "Usage : %s -l <logfile> -s <searchstring> [-t <timeout>]\n", argv[0]);
    	exit(1);
    }
    
    c = 0;

	/* Open the logfile, die if we can't */

    if ( (fptr = fopen(logfile, "r")) == NULL) {
	fprintf( stderr, "Error - Unable to open %s.\n", logfile);
	exit(1);
    }

    s = (char *) malloc(1024);
    
    while( c == 0 ) {
    	/* Find the length of the logfile */
   	
	fseek(fptr, (long) 0, SEEK_END);
	newpos=ftell(fptr);
	
	/* file grew? print the new content */
	if ( newpos > pos ) {
	    fseek(fptr, pos, SEEK_SET);
	    while ( fgets(s, 1024, fptr) != NULL) {
	    	fprintf( stdout, "%s", s);
	    	if (strstr(s, searchstr) != NULL) {
    	        	c++;
    	        	break;
    	    	}
    	    }
    	    pos = ftell(fptr);
	} else if(delay < timeout) {
	    sleep(1);
	    delay++;
	} else {
	    fprintf( stderr, "Timeout - String '%s' not found in '%s'. Giving up.\n", searchstr, logfile);
	    break;
	}
    }

    free(s);

    fclose(fptr);
    exit(0);
}