xref: /original-bsd/games/adventure/wizard.c (revision 2301fdfb)
1 #
2 /*      Re-coding of advent in C: privileged operations                 */
3 
4 static char sccsid[] = "	wizard.c	4.1	82/05/11	";
5 
6 # include "hdr.h"
7 
8 datime(d,t)
9 int *d,*t;
10 {       int tvec[2],*tptr;
11 	int *localtime();
12 	time(tvec);
13 	tptr=localtime(tvec);
14 	*d=tptr[7]+365*(tptr[5]-77);    /* day since 1977  (mod leap)   */
15 	/* bug: this will overflow in the year 2066 AD                  */
16 	/* it will be attributed to Wm the C's millenial celebration    */
17 	*t=tptr[2]*60+tptr[1];          /* and minutes since midnite    */
18 }                                       /* pretty painless              */
19 
20 
21 char *magic;
22 
23 poof()
24 {       magic="dwarf";
25 	latncy=45;
26 }
27 
28 start(n)
29 {       int d,t,delay;
30 	datime(&d,&t);
31 	delay=(d-saved)*1440+(t-savet); /* good for about a month       */
32 	if (delay>=latncy || setup >= 0)
33 	{       saved= -1;
34 		return(FALSE);
35 	}
36 	printf("This adventure was suspended a mere %d minutes ago.",delay);
37 	if (delay<=latncy/3)
38 	{       mspeak(2);
39 		exit(0);
40 	}
41 	mspeak(8);
42 	if (!wizard())
43 	{       mspeak(9);
44 		exit(0);
45 	}
46 	saved = -1;
47 	return(FALSE);
48 }
49 
50 wizard()                /* not as complex as advent/10 (for now)        */
51 {       register int wiz;
52 	char *word,*x;
53 	if (!yesm(16,0,7)) return(FALSE);
54 	mspeak(17);
55 	getin(&word,&x);
56 	if (!weq(word,magic))
57 	{       mspeak(20);
58 		return(FALSE);
59 	}
60 	mspeak(19);
61 	return(TRUE);
62 }
63 
64 ciao(cmdfile)
65 char *cmdfile;
66 {       register char *c;
67 	register int outfd, size;
68 	char fname[80], buf[512];
69 	extern unsigned filesize;
70 
71 	lseek(datfd,(long)filesize,0);
72 	for (;;)
73 	{       printf("What would you like to call the saved version?\n");
74 		for (c=fname;; c++)
75 			if ((*c=getchar())=='\n') break;
76 		*c=0;
77 		if (save(cmdfile,fname)>=0) break;
78 		printf("I can't use that one.\n");
79 		return;
80 	}
81 	outfd=open(fname,1);
82 	lseek(outfd,0L,2);                /* end of executable file       */
83 	while ((size=read(datfd,buf,512))>0)
84 		write(outfd,buf,size);  /* copy the message data        */
85 	printf("                    ^\n");
86 	printf("That should do it.  Gis revido.\n");
87 	exit(0);
88 }
89 
90 
91 ran(range)                              /* uses unix rng                */
92 int range;                              /* can't div by 32768 because   */
93 {
94 	long rand(), i;
95 	i = rand() % range;
96 	return(i);
97 }
98 
99