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

⟦81412fb26⟧ TextFile

    Length: 2833 (0xb11)
    Types: TextFile
    Names: »main.c.orig«

Derivation

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

TextFile

/*
 * Adventure Driver Program
 *
 * Version 1.0, 29 December 1981
 * Chris Torek
 * advent [-name] [adventure file]
 *
 * Lots of hacks sometime in '85
 */

#include "adv.h"
#undef TRUE
#undef FALSE
#undef LL
#include <pwd.h>
#include <ctype.h>
#include <signal.h>

int IntCatch();
char *getlogin();
struct passwd *getpwuid();

/*
 * Start up.  Handle the single option ("-username"), get the
 * name of the adventure file, and run it.
 */
main(argc, argv)
	register argc;
	register char **argv;
{
	register int c;

	++argv;
	if (argc > 1 && **argv == '-') {
		--argc;
		name = (*argv++) + 1;
	}
	else {
		name = getlogin();
		if (name == 0) {
			struct passwd *p = getpwuid(getuid());

			if (p)
				name = p->pw_name;
			else {
				fprintf(stderr, "Who are you?\n");
				exit(1);
			}
		}
	}
	if (--argc)
		strcpy(fname, *argv);
	else {
		printf("Enter the adventure filename: ");
		fgets(fname, sizeof fname, stdin);
		fname[strlen(fname) - 1] = 0;
	}
#ifdef DEBUG
	printf ("Starting adventure %s for %s\n", fname, name);
#endif
	srand(getpid() + time((long *)0));
	file = fopen(fname, "r");
	if (file == NULL) {
		printf("There's no such adventure!\n");
		exit(1);
	}

	/*
	 * Fire up windows.
	 */
	if (Winit(0, 0)) {
		printf ("Sorry, this program won't run on your terminal.\n");
		exit(1);
	}
	printf("Hi %s, just a second while I create the world...\r\n", name);
	fflush(stdout);

	/*
	 * Get some windows and set them up our way (no cursor, nice
	 * newline mode); we'll use the real screen cursor for input.
	 * N.B.: it is important that TopWin is initially as large as
	 * the real screen.
	 */
	Wscreensize(&ROWS, &COLS);
	BaseWin = Wopen(1, 0, 0, COLS, ROWS, 0, 0);
	TopWin = Wopen(0, 0, 0, COLS, ROWS, 0, 0);
	Woncursor(BaseWin, 0);
	Woncursor(TopWin, 0);
	Wnewline(BaseWin, 1);
	Wnewline(TopWin, 1);
	WSetRealCursor++;

	/*
	 * Read in the adventure file.
	 */
	readin();

	/*
	 * All set.
	 */
#ifdef BSD41				/* 4.1 */
	sigset(SIGINT, IntCatch);
	sigset(SIGQUIT, IntCatch);
#else					/* 4.2 */
	signal(SIGINT, IntCatch);
	signal(SIGQUIT, IntCatch);
#endif
	do {
		init();
		play();
		prt("Do you wish to play again (Y/N)? ");
		prt(0);
		refresh();
		do {
			ReadingTerminal++;
			c = getchar();
			ReadingTerminal = 0;
			if (isupper(c))
				c = tolower(c);
		} while (c != 'y' && c != 'n');
		prt(c == 'n' ? "No\n" : "Yes\n");
		Wrefresh(0);
	} while (c != 'n');
	prt("Goodbye!\n");
	refresh();
	Wexit(0);
}

/*
 * Handle interrupts - just print a message about how to quit.
 */
IntCatch()
{
	static char msg[] = " *** Use the QUIT command to quit.";

	if (ReadingTerminal == 2) {	/* print our msg in TopWin */
		WAcursor(TopWin, 1, 0);
		Wputs(msg, TopWin);
	}
	else {
		if (BaseWin->w_cursor.col)
			Wputc('\n', BaseWin);
		Wputs(msg, BaseWin);
		Wputc('\n', BaseWin);
	}
	if (ReadingTerminal)
		refresh();
}