|
|
1.1 ! root 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:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.