|
|
1.1 root 1: # include "trek.h"
2: #include "stat.h"
3:
4: /**
5: ** dump game for later restart
6: **/
7:
8: #define CHECK 9
9:
10:
11: inode(f)
12: { STATBUF buf;
13:
14: fstat(f,&buf);
15: return(buf.i_ino);
16: }
17:
18: long Ftime(f)
19: { STATBUF buf;
20:
21: fstat(f,&buf);
22: return(buf.i_mtime);
23: }
24:
25: dumpgame()
26: {
27: register int f, len;
28: int check;
29: long t;
30: int n;
31:
32: if((f=creat("trek.dump",0664))<0) {
33: printf("Cannot create 'trek.dump'\n");
34: return;
35: }
36:
37: check=CHECK; write(f,&check,2);
38: len=sbrk(0); lseek(f,8L,0);
39: if(write(f,0,len)!=len) {
40: printf("Failed to write dump\n");
41: return;
42: }
43: lseek(f,2L,0);
44: n=inode(f); write(f,&n,2);
45: time(&t); write(f,&t,4); close(f);
46: exit(0);
47: }
48:
49: restart()
50: {
51: register int f, len;
52: int check;
53: char chkpass[PWDLEN];
54: long t, tfile;
55: int n, nfile;
56:
57: if((f=open("trek.dump",0))<0) {
58: printf("Cannot open 'trek.dump'\n");
59: return(0);
60: }
61:
62: read(f,&check,2);
63: read(f,&n,2); read(f,&t,4);
64: nfile=inode(f); tfile=Ftime(f);
65: len=sbrk(0);
66: if(check!=CHECK || read(f,0,len)!=len) {
67: printf("Cannot restart\n");
68: exit(1);
69: }
70: getpasswd(chkpass);
71: if (cf(chkpass, Game.passwd)) {
72: printf("Incorrect password\n");
73: exit(1);
74: }
75: unlink("trek.dump");
76: if(nfile!=n || tfile>t+2)
77: lose(L_CHEAT);
78: return(1);
79: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.