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: G T

⟦7466358da⟧ TextFile

    Length: 2079 (0x81f)
    Types: TextFile
    Names: »GB.c«

Derivation

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

TextFile

/*
 * Galactic Bloodshed (Robert Chansky, smq@b)
 *	GB.c --
 *	  main loop, prints instructions, grabs command line from 
 *	  standard output, executes command.
 */


#include "vars.h"
#include "races.h"
#include <curses.h>
#include <sys/stat.h>
struct stat buf;
#include <signal.h>
#include <strings.h>
#include <pwd.h>
struct passwd *passwd;
#include <setjmp.h>
jmp_buf main_jenv;
int God = 0;

extern char telegram_file[50];

main()
{
int notified=0,s,i;
char c,commstr[MAXCOMMSTRSIZE];
int maim_handler();
int maim_stardata;


	setegid(PLAYER_GROUP_ID);

	srandom(getpid());
	initscr();

	printf("Galactic Bloodshed ver %s\ntype 'help' for help.\n", VERS);

	openstardata(&maim_stardata);
	  getsdata(maim_stardata,&Sdata);

	for (s=0; s<Sdata.numstars; s++)
		getstar(maim_stardata,&(Stars[s]),s);
	close(maim_stardata);

	passwd = getpwuid(geteuid());
	if (!strcmp(passwd->pw_name, PLAYER_GOD)) {
		God = 1;
		printf("Login as what player? ");
		scanf("%s",commstr);
		getchr();
	} else sprintf(commstr,"%s", getlogin() );
	i = Getracenum(commstr);

	if (!i) enroll(commstr);
	 else getrace(&Race,i);
	Playernum = Race->Playernum;
	if (God)
		printf("Logging in as player %d.\n",Playernum);

	docommand("cs");	/* chdir to home scope */
	Dir.zoom = 1.0;

	setjmp(main_jenv);	/* set up environment for jump if error */

	sprintf(telegram_file, "%s.%d", TELEGRAMFL, Playernum);
		  /* used in several routines, + each csh command */

	do  {
	    signal(SIGINT, maim_handler );

	    stat(telegram_file, &buf);
	    if (buf.st_size > notified) {
		  printf("\nYou have telegram(s) waiting.\n\n");
		  notified = buf.st_size;
	    }

	    printf("%s",Dir.prompt);
	    i = 0;
	    while ((c=getchr()) != '\n' && i<MAXCOMMSTRSIZE)
	         commstr[i++] = c;
	    commstr[i] = '\0';
	    if (*commstr==EOF) {
		clearerr(stdin);
		*commstr = '\0';
	    }

	} while (docommand(commstr));

	endwin();


/*	printf("\nhalelujah!\n\n");*/
}

maim_handler(sig, code/*, scp*/)
int sig,code;
/*void *scp;	/* supposed to be struct sigcontext */
{
 putchar('\n');
 longjmp(main_jenv,1);
}