Commit | Line | Data |
---|---|---|
f3510020 RH |
1 | # |
2 | /* Re-coding of advent in C: privileged operations */ | |
3 | ||
01eb5674 | 4 | static char sccsid[] = " wizard.c 4.1 82/05/11 "; |
f3510020 RH |
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 |