DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T m

⟦c192e0a96⟧ TextFile

    Length: 4941 (0x134d)
    Types: TextFile
    Names: »mudprog.c«

Derivation

└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
    └─⟦this⟧ »EUUGD18/General/Abermud/mudprog.c« 

TextFile

/*
** Two Phase Game System
*/
#define DATA_DEF
#include "kernel.h"
#include <signal.h>
#ifdef	KICKOFFGUEST
#include <time.h>
#endif	/* KICKOFFGUEST */
#ifdef	RCSID
static char RCS[] =
	"$Header: mudprog.c,v 1.1 89/03/13 09:37:03 rsalz Exp $";
#endif	/* RCSID */


char	*dirns[6] = {"North", "East ", "South", "West ", "Up   ", "Down "};
char	*txt1 = "";
char	*txt2 = "";
char	*localname;
char	 in_ms[81] = "has arrived.";
char	 min_ms[81] = "appears with an ear-splitting bang.";
char	 mout_ms[81] = "vanishes in a puff of smoke.";
char	 out_ms[81] = "";
char	 prm_str[128] = "$";
char	 wd_her[16] = " ";
char	 wd_him[16] = " ";
char	 wd_it[64] = " ";
char	 wd_th2[64] = " ";
char	 wd_them[16] = " ";
char	 wd_there[128] = " ";
char	 wordbuf[128] = " ";
int	 cms = 1;
int	 iskb = 1;
int	 fighting = -1;
int	 mynum = -1;
int	 ob1 = -1;
int	 ob2 = -1;
int	 pl1 = -1;
int	 pl2 = -1;
int	 prep = -1;
int	 snoopd = -1;
int	 snoopt = -1;

static int sig_active;


int 
op(name)
    char *name;
{
    return EQ(name, MASTERUSER);
}

main(argc, argv)
    int argc;
    char *argv[];
{
    char x[32];
    time_t a;

    if (argc != 2) {
	printf("Args!\n");
	exit(1);
    }
    userid = getuid();
    sys_uid = geteuid();
    localname = cuserid((char *)NULL);
    time(&a);
    srand((int)a);
    chdir(GAME_DIR);
    sig_init();
    bootstrap();
    printf("Entering Game ....\n");
    strcpy(x, argv[1]);
    if (EQ(x, "Phantom"))
	sprintf(globme, "The %s", x);
    else
	strcpy(globme, x);
    if (fobn(globme) != -1)
	crapup("I can't call you that, it clashes with an object in the game");
    printf("Hello %s\n", globme);
    mudlog("GAME ENTRY: %s[%s]", globme, localname);
    setstdin();
    keysetup();
    talker(globme);
}


crapup(str)
    char *str;
{
    static char *dashes =
"-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-";
    pbfr();
    if (aliased) {
	bprintf("%s\n", str);
	unalias();
	error();
	return;
    }
    key_mode = pr_due = 0;	        /* So we dont get a prompt after the
					 * exit */
    keysetback();
    printf("\n%s\n\n%s\n\n%s\n", dashes, str, dashes);
    sleep(5);
    exit(0);
}


sig_alon()
{
    sig_active = 1;
    signal(SIGALRM, sig_occur);
    alarm(IO_INTER);
}



unblock_alarm()
{
    signal(SIGALRM, sig_occur);
    if (sig_active)
	alarm(IO_INTER);
}

block_alarm()
{
    signal(SIGALRM, SIG_IGN);
}


sig_aloff()
{
    sig_active = 0;
    signal(SIGALRM, SIG_IGN);
    alarm(0);
}

#ifdef	KICKOFFGUEST
tisyschk()
{
    static int timewarn;
    time_t x;
    struct tm *a;

    time(&x);
    a = localtime(&x);
    if (!timewarn) {
	if (a->tm_wday >= 1 && a->tm_wday <= 5) {
	    if (a->tm_hour == 7) {
		bprintf("ABERMUD is closing shortly\n");
		timewarn++;
		return;
	    }
	}
	else if (a->tm_hour == 9) {
	    bprintf("ABERMUD is closing shortly\n");
	    timewarn++;
	    return;
	}
    }
    if (timewarn && a->tm_min > 2) {
	loseme();
	crapup("AberMUD has closed");
    }
}
#endif	/* KICKOFFGUEST */

sig_occur()
{
    if (!sig_active)
	return;
    sig_aloff();
    openworld();
    interrupt = 1;
    rte();
    interrupt = 0;
    on_timing();
    closeworld();
    key_reprint();
    sig_alon();
#ifdef	KICKOFFGUEST
    if (userid == GUESTID)
	tisyschk();
#endif	/* KICKOFFGUEST */
}

#ifdef SCREWQUOTA
/* UNTESTED */
sig_reboot()
{
    /* Process has exceeded virtual time limit - ie the final kick off comes
     * soon. Therefore it forks and kills off the old process the new one
     * gets a whole new set of cpu time.....
     * Good innit! */
    switch (fork()) {
    case -1:
	crapup("Panic: System Error - Fork Failed");
    case 0:
	exit(0);
    }
    fcntl(fileno(stdin), F_SETOWN, getpid());
    return;
}
#endif	/* SCREWQUOTA */

ohdear()
{
    zapped = 1;
    setplev(mynum, 10001);
    crashcom();
    printf("Something very unpleasant has just happened.\n");
    exit(0);
}

sig_init()
{
    signal(SIGHUP, sig_oops);
    signal(SIGSEGV, ohdear);
    signal(SIGINT, SIG_IGN);
    signal(SIGTERM, sig_ctrlc);
    signal(SIGTSTP,SIG_IGN);
    signal(SIGQUIT,SIG_IGN);
    signal(SIGQUIT, sig_ctrlc);
#ifdef	SCREWQUOTA
    signal(SIGXCPU, sig_reboot);
#endif	/* SCREWQUOTA */
}

sig_oops()
{
    sig_aloff();
    loseme();
    keysetback();
    exit(255);
}

sig_ctrlc()
{
    printf("^C\n");
}



setstdin()
{
}

fetchprmpt(level)
    int level;
{
    FILE *a;
    char c, x[128];
    int l;

    if ((a = fopen(LEV_PRM, "r")) == NULL) {
	strcpy(prm_str, "?");
	return;
    }
    while (fgets(x, sizeof x, a)) {
	sscanf(x, "%c:%d:%s", &c, &l, prm_str);
	if (l == level) {
	    if (c == 'Y') {
		fgets(in_ms, sizeof in_ms, a);
		fgets(out_ms, sizeof out_ms, a);
		fgets(min_ms, sizeof min_ms, a);
		fgets(mout_ms, sizeof mout_ms, a);
		*strchr(mout_ms, '\n') = 0;
		*strchr(min_ms, '\n') = 0;
		*strchr(in_ms, '\n') = 0;
		*strchr(out_ms, '\n') = 0;
	    }
	    fclose(a);
	    return;
	}
    }
    fclose(a);
    strcpy(prm_str, ">");
}