From 77e3814f0c0e3dea4d0032e25666f77e6f83bfff Mon Sep 17 00:00:00 2001 From: cgd Date: Sun, 21 Mar 1993 09:45:37 +0000 Subject: initial import of 386bsd-0.1 sources --- larn/diag.c | 314 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 314 insertions(+) create mode 100644 larn/diag.c (limited to 'larn/diag.c') diff --git a/larn/diag.c b/larn/diag.c new file mode 100644 index 00000000..4ed557d1 --- /dev/null +++ b/larn/diag.c @@ -0,0 +1,314 @@ +/* diag.c Larn is copyrighted 1986 by Noah Morgan. */ +#include +#include +#include +#include "header.h" +extern long int initialtime; +extern int rmst,maxitm,lasttime; +extern char nosignal; +static struct tms cputime; +/* + *************************** + DIAG -- dungeon diagnostics + *************************** + + subroutine to print out data for debugging + */ +#ifdef EXTRA +static int rndcount[16]; +diag() + { + register int i,j; + int hit,dam; + cursors(); lwclose(); + if (lcreat(diagfile) < 0) /* open the diagnostic file */ + { + lcreat((char*)0); lprcat("\ndiagnostic failure\n"); return(-1); + } + + write(1,"\nDiagnosing . . .\n",18); + lprcat("\n\nBeginning of DIAG diagnostics ----------\n"); + +/* for the character attributes */ + + lprintf("\n\nPlayer attributes:\n\nHit points: %2d(%2d)",(long)c[HP],(long)c[HPMAX]); + lprintf("\ngold: %d Experience: %d Character level: %d Level in caverns: %d", + (long)c[GOLD],(long)c[EXPERIENCE],(long)c[LEVEL],(long)level); + lprintf("\nTotal types of monsters: %d",(long)MAXMONST+8); + + lprcat("\f\nHere's the dungeon:\n\n"); + + i=level; + for (j=0; j to save game\n",fname); + nosignal=0; return(-1); + } + + set_score_output(); + lwrite((char*)beenhere,MAXLEVEL+MAXVLEVEL); + for (k=0; kp) + lwrite((char*)sp,sizeof(struct sphere)); /* save spheres of annihilation */ + time(&zzz); lprint((long)(zzz-initialtime)); + lwrite((char*)&zzz,sizeof(long)); + if (fstat(lfd,&statbuf)< 0) lprint(0L); + else lprint((long)statbuf.st_ino); /* inode # */ + lwclose(); lastmonst[0] = 0; +#ifndef VT100 + setscroll(); +#endif VT100 + lcreat((char*)0); nosignal=0; + return(0); + } + +restoregame(fname) + char *fname; + { + register int i,k; + register struct sphere *sp,*sp2; + struct stat filetimes; + cursors(); lprcat("\nRestoring . . ."); lflush(); + if (lopen(fname) <= 0) + { + lcreat((char*)0); lprintf("\nCan't open file <%s>to restore game\n",fname); + nap(2000); c[GOLD]=c[BANKACCOUNT]=0; died(-265); return; + } + + lrfill((char*)beenhere,MAXLEVEL+MAXVLEVEL); + for (k=0; kp=0; /* null out pointer */ + if (i==0) spheres=sp; /* beginning of list */ + else sp2->p = sp; + } + + time(&zzz); + initialtime = zzz-lrint(); + fstat(fd,&filetimes); /* get the creation and modification time of file */ + lrfill((char*)&zzz,sizeof(long)); zzz += 6; + if (filetimes.st_ctime > zzz) fsorry(); /* file create time */ + else if (filetimes.st_mtime > zzz) fsorry(); /* file modify time */ + if (c[HP]<0) { died(284); return; } /* died a post mortem death */ + + oldx = oldy = 0; + i = lrint(); /* inode # */ + if (i && (filetimes.st_ino!=i)) fsorry(); + lrclose(); + if (strcmp(fname,ckpfile) == 0) + { + if (lappend(fname) < 0) fcheat(); else { lprc(' '); lwclose(); } + lcreat((char*)0); + } + else if (unlink(fname) < 0) fcheat(); /* can't unlink save file */ +/* for the greedy cheater checker */ + for (k=0; k<6; k++) if (c[k]>99) greedy(); + if (c[HPMAX]>999 || c[SPELLMAX]>125) greedy(); + if (c[LEVEL]==25 && c[EXPERIENCE]>skill[24]) /* if patch up lev 25 player */ + { + long tmp; + tmp = c[EXPERIENCE]-skill[24]; /* amount to go up */ + c[EXPERIENCE] = skill[24]; + raiseexperience((long)tmp); + } + getlevel(); lasttime=gtime; + } + +/* + subroutine to not allow greedy cheaters + */ +greedy() + { +#if WIZID + if (wizard) return; +#endif + + lprcat("\n\nI am so sorry, but your character is a little TOO good! Since this\n"); + lprcat("cannot normally happen from an honest game, I must assume that you cheated.\n"); + lprcat("In that you are GREEDY as well as a CHEATER, I cannot allow this game\n"); + lprcat("to continue.\n"); nap(5000); c[GOLD]=c[BANKACCOUNT]=0; died(-267); return; + } + +/* + subroutine to not allow altered save files and terminate the attempted + restart + */ +fsorry() + { + lprcat("\nSorry, but your savefile has been altered.\n"); + lprcat("However, seeing as I am a good sport, I will let you play.\n"); + lprcat("Be advised though, you won't be placed on the normal scoreboard."); + cheat = 1; nap(4000); + } + +/* + subroutine to not allow game if save file can't be deleted + */ +fcheat() + { +#if WIZID + if (wizard) return; +#endif + + lprcat("\nSorry, but your savefile can't be deleted. This can only mean\n"); + lprcat("that you tried to CHEAT by protecting the directory the savefile\n"); + lprcat("is in. Since this is unfair to the rest of the larn community, I\n"); + lprcat("cannot let you play this game.\n"); + nap(5000); c[GOLD]=c[BANKACCOUNT]=0; died(-268); return; + } -- cgit v1.2.3-56-ge451