DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T f

⟦c9bb76d9d⟧ TextFile

    Length: 2748 (0xabc)
    Types: TextFile
    Names: »final.c«

Derivation

└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
    └─⟦this⟧ »EUUGD18/General/Craps/final.c« 

TextFile

#include "types.h"
#include "ext.h"
#include <stdio.h>
#include <sys/types.h>
#include <sys/file.h>

/*
 *
 * here is the file name for the high roller list.
 * It will need to be modified for your system.
 *
 */

char *sfile="/usr/games/lib/craps.list";
char *reclock="/usr/games/lib/craps.lock";

#ifdef	SCORES
#define	NAMELEN		40
typedef struct node {
	struct node *next;
	int uid;
	long ngames;
	double amt;
	char name[NAMELEN+1];
} scores;
#endif

final(d)
int d;
{
#ifdef	SCORES
	FILE *list;
	int f,sleepct=300,cuid,did=0,i,n=0,comp(),nchars;
	long l;
	double x;
	char s[NAMELEN+1],c;
	scores *score;

	cuid=getuid();
	clear(); refresh();
	signal(SIGHUP,SIG_IGN);
	signal(SIGINT,SIG_IGN);
	while(link(sfile, reclock) == -1) {
		perror(reclock);
		if(!sleepct--) {
			puts("I give up. Sorry.");
			puts("Perhaps there is an old record_lock around?");
			exit(-1);
		}
		printf("Waiting for access to record file. (%d)\n",
			sleepct);
		fflush(stdout);
		sleep(1);
	}
	if((list=fopen(sfile,"r"))==NULL) {
		fprintf(stderr,"can't open %s\n",sfile);
		myexit();
		return(0);
	}
	while((c=fgetc(list))!=EOF) if(c=='\n') n++;
	rewind(list);
	score=(scores *)malloc((n+1)*sizeof(scores));
	cuid=getuid();
	i=0;
	while(1) {
		if((fscanf(list,"%d %lf %ld",
			&score[i].uid,
			&score[i].amt,
			&score[i].ngames))
		== EOF) break;
		while((c=fgetc(list))==' ') ;
		nchars=0;
		while(c!='\n' && nchars<NAMELEN) {
			score[i].name[nchars++]=c;
			c=fgetc(list);
		}
		while(c!='\n') c=fgetc(list);
		score[i].name[nchars]=0;
		if(score[i].uid==cuid) {
			score[i].amt = score[i].amt + (wins-loss);
			score[i].ngames = score[i].ngames + 1;
			did=1;
		}
		i++;
	}
	fclose(list);
	if(!did) {
		score[n].uid = cuid;
		score[n].amt = (wins-loss);
		score[n].ngames = 1;
		if(getenv("CRAPSNAME")==NULL)
#ifdef	SYSV
			strncpy(score[n].name,getenv("LOGNAME"),NAMELEN);
#else
#ifdef  XENIX
			strncpy(score[n].name,getenv("LOGNAME"),NAMELEN);
#else
			strncpy(score[n].name,getenv("USER"),NAMELEN);
#endif
#endif
		else strncpy(score[n].name,getenv("CRAPSNAME"),NAMELEN);
		n++;
	}
	qsort(score,n,sizeof(scores),comp);
	list=fopen(sfile,"w");
	for(i=0;i<n;i++)
		fprintf(list,"%d %.2f %ld %s\n",
		score[i].uid,
		score[i].amt,
		score[i].ngames,
		score[i].name);
	fclose(list);
	clear();
	mvaddstr(0,10,"Name                Total to Date              Games");
	mvaddstr(1,10,"----------------------------------------------------");
	refresh();
	putchar('\n');
	for(i=0;i<n;i++)
		printf("          %-28s%10.2f%14ld\n",score[i].name,score[i].amt,score[i].ngames);
	myexit();
#endif
	return(0);
}

#ifdef	SCORES
comp(x,y)
scores *x,*y;
{
	if(x->amt > y->amt) return(-1);
	if(x->amt == y->amt) return(0);
	return(1);
}
#endif

myexit()
{
	unlink(reclock);
}