V10/games/trek/dump.c
# include "trek.h"
#include "stat.h"
/**
** dump game for later restart
**/
#define CHECK 9
inode(f)
{ STATBUF buf;
fstat(f,&buf);
return(buf.i_ino);
}
long Ftime(f)
{ STATBUF buf;
fstat(f,&buf);
return(buf.i_mtime);
}
dumpgame()
{
register int f, len;
int check;
long t;
int n;
if((f=creat("trek.dump",0664))<0) {
printf("Cannot create 'trek.dump'\n");
return;
}
check=CHECK; write(f,&check,2);
len=sbrk(0); lseek(f,8L,0);
if(write(f,0,len)!=len) {
printf("Failed to write dump\n");
return;
}
lseek(f,2L,0);
n=inode(f); write(f,&n,2);
time(&t); write(f,&t,4); close(f);
exit(0);
}
restart()
{
register int f, len;
int check;
char chkpass[PWDLEN];
long t, tfile;
int n, nfile;
if((f=open("trek.dump",0))<0) {
printf("Cannot open 'trek.dump'\n");
return(0);
}
read(f,&check,2);
read(f,&n,2); read(f,&t,4);
nfile=inode(f); tfile=Ftime(f);
len=sbrk(0);
if(check!=CHECK || read(f,0,len)!=len) {
printf("Cannot restart\n");
exit(1);
}
getpasswd(chkpass);
if (cf(chkpass, Game.passwd)) {
printf("Incorrect password\n");
exit(1);
}
unlink("trek.dump");
if(nfile!=n || tfile>t+2)
lose(L_CHEAT);
return(1);
}