/*
* MAIN.C:
*
* This files contains the main() function which initiates the
* game.
*
* Copyright (C) 1991, 1992, 1993 Brett J. Vickers
*
*/
#include "mstruct.h"
#include "mextern.h"
#include <time.h>
#define SCHEDPORT 4040
int Port;
char report =0;
main(argc, argv)
int argc;
char *argv[];
{
int i;
static void mvc_log();
static int schedule_g();
Port = PORTNUM;
for(i=0; i<PMAX; i++) Spy[i] = -1;
#ifdef SCHED
if(argc == 1)
Port = schedule_g();
#endif SCHED
#ifndef DEBUG
if(fork()) exit(0); /* go into background */
close(0); close(1); close(2); /* close stdio */
#endif
if (argc == 2)
if(isnumber(argv[1]))
Port = atoi(argv[1]);
else if (!strcmp(argv[1],"-r"))
report = 1;
if (argc == 3){
if(isnumber(argv[1]))
Port = atoi(argv[1]);
else if (!strcmp(argv[1],"-r"))
report = 1;
if(isnumber(argv[2]))
Port = atoi(argv[2]);
else if (!strcmp(argv[2],"-r"))
report = 1;
}
#ifdef AUTOSHUTDOWN
if (!Shutdown.interval){
Shutdown.ltime = time(0);
Shutdown.interval = 21600L;
}
#endif
umask(000);
srand(getpid() + time(0));
load_lockouts();
#ifndef DEBUG
sock_init(Port,0);
#else
sock_init(Port,1);
#endif
#ifdef RECORD_ALL
mvc_log();
#endif RECORD_ALL
{
long c;
c = time(0);
logf("--- Game Up: %d --- (%.24s)\n", Port, ctime(&c));
}
sock_loop();
}
/*================================================================*/
#define DAYSEC 86400L
#define MORNT 27900L
#define MIDSEC(x) (((x->tm_hour)*3600)+((x->tm_min)*60)+(x->tm_sec))
/*================================================================*/
int schedule_g()
/* The schedule_g function keeps the game on a time schedule */
{
struct tm *time_m;
long t = 0;
int mport = SCHEDPORT, port = PORTNUM;
enum {Sun, Mon, Tue, Wed, Thu, Fri, Sat};
t = time(0);
time_m = localtime(&t);
t = 0;
switch(time_m->tm_wday){
case Sun:
t = DAYSEC - MIDSEC(time_m) + MORNT;
break;
case Mon:
case Tue:
case Wed:
case Thu:
if (time_m->tm_hour >= 18)
t = MORNT + DAYSEC - MIDSEC(time_m);
else if (MIDSEC(time_m) < MORNT)
t = MORNT - MIDSEC(time_m);
else{
t = (18L*3600L) - MIDSEC(time_m);
port = SCHEDPORT;
mport = PORTNUM;
}
break;
case Fri:
if (time_m->tm_hour >= 18)
t = DAYSEC*3 - MIDSEC(time_m) + MORNT;
else if (MIDSEC(time_m) < MORNT)
t = MORNT - MIDSEC(time_m);
else{
t = (18L*3600L) - MIDSEC(time_m);
port = SCHEDPORT;
mport = PORTNUM;
}
break;
case Sat:
t = DAYSEC*2 - MIDSEC(time_m) + MORNT;
break;
}
if (!port)
exit(0);
#ifdef AUTOSHUTDOWN
t = MIN(21600L,t);
#endif
Shutdown.ltime = time(0);
Shutdown.interval = t;
Port = mport;
return (port);
}
/*================================================================*/
void mvc_log(){
/* This function renames the list of all command file to include *
* the date. This is done to preserve the list commands that *
* occured before a crash. */
long t;
char *date, mfile[128], rfile[128];
int i;
t = time(0);
date = ctime(&t);
for(i=0;i<24;i++)
if(date[i] == ' ')
date[i] = '_';
date[24] = 0;
sprintf(rfile,"%s/%s",LOGPATH,"all_cmd");
sprintf(mfile,"%s/%s_%s",LOGPATH,"all_cmd",date);
link(rfile,mfile);
unlink(rfile);
}