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 c

⟦794990fb1⟧ TextFile

    Length: 5133 (0x140d)
    Types: TextFile
    Names: »check.c«

Derivation

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

TextFile

/* Conquer: Copyright (c) 1988 by Edward M Barlow	*/
/* check.c contains checking and debugging functions	*/

#include	<ctype.h>
#include	<stdio.h>
#include	"header.h"
#include	"data.h"

void
verify_ntn( __file__, __line__ )
char	__file__[];
int	__line__;
{
	register struct s_nation	*nptr;
	register int	i;
	register int	country;
	struct army	*a;

	for( country = 0; country < NTOTAL; country++ ) {
		nptr = &ntn[country];

		if(nptr->active == 0) continue;
		if( nptr->metals < 0.0 ) {
			fprintf( stderr, "file %s: line %d: nation[%d] metal = %ld\n",
				__file__, __line__, country, nptr->metals );
			nptr->metals = 0.0;
		}

		if( nptr->jewels < 0 ) {
			fprintf( stderr, "file %s: line %d: nation[%d] jewels = %ld\n",
				__file__, __line__, country, nptr->jewels );
			nptr->jewels = 0.0;
		}

		for( i = 0; i < MAXARM; i++ ) {
			a = &nptr->arm[i];
			if( a->sold < 0 ) {
				fprintf( stderr, "file %s: line %d: nation[%d] army[%d] sold = %d\n",
					__file__, __line__, country, i, a->sold );
				a->sold = 0;
			}
			if( a->sold==0 ) continue;
			if( a->xloc >= MAPX ) {
				fprintf( stderr, "file %s: line %d: nation[%d] army[%d] xlocation = %d\n",
					__file__, __line__, country, i, a->xloc );
				a->xloc = 0;
			}
			if( a->yloc >= MAPY ) {
				fprintf( stderr, "file %s: line %d: nation[%d] army[%d] ylocation = %d\n",
					__file__, __line__, country, i, a->yloc );
				a->yloc = 0;
			}
			if( sct[a->xloc][a->yloc].altitude==PEAK ) {
				fprintf( stderr, "file %s: line %d: nation[%d] army[%d] loc=%d,%d (peak)\n",
				__file__,__line__,country,i,a->xloc,a->yloc);
				a->sold = 0;
			}
			if( sct[a->xloc][a->yloc].altitude==WATER ) {
				fprintf( stderr, "file %s: line %d: nation[%d] army[%d] loc=%d,%d (water) men=%d\n",
				__file__,__line__,country,i,a->xloc,a->yloc,a->sold);
				a->sold = 0;
			}
		} /* for */

		for( i = 0; i < NTOTAL; i++ ) {
			if( nptr->dstatus[i] > JIHAD ) {
				fprintf( stderr, "file %s: line %d: nation[%d] diplomatic status with %d = %d\n",
					__file__, __line__, country, i, nptr->dstatus[i] );
				nptr->dstatus[i] = WAR;
			}
		} /* for */
	} /* for */
} /* verify_ntn() */

void
verify_sct( __file__, __line__ )
char	__file__[];
int	__line__;
{
	register struct s_sector	*sptr;
	register int		x, y;

	for( x = 0; x < MAPX; x++ ) {
		for( y = 0; y < MAPY; y++ ) {
			sptr = &sct[x][y];

			if(sptr->tradegood>TG_none) {
				fprintf( stderr, "file %s: line %d: sct[%d][%d].tradegood = %d (invalid)\n", __file__, __line__, x, y, sptr->tradegood );
				sptr->tradegood=TG_none;
			}
			if(( sptr->metal != 0 )
			&&(( sptr->tradegood>END_MINE)
			  ||(sptr->tradegood<=END_NORMAL))) {
				fprintf( stderr, "file %s: line %d: sct[%d][%d].metal = %d with no tradegood\n", __file__, __line__, x, y, sptr->metal );
				sptr->metal = 0;
			}

			if(( sptr->jewels != 0 )
			&&((sptr->tradegood>END_WEALTH)
			  ||(sptr->tradegood<=END_MINE))) {
				fprintf( stderr, "file %s: line %d: sct[%d][%d].jewels = %d with no tradegood\n", __file__, __line__, x, y, sptr->jewels );
				sptr->jewels = 0;
			}

			if( sptr->people > ABSMAXPEOPLE )
				sptr->people = ABSMAXPEOPLE;

			if( sptr->people < 0 ) {
				fprintf( stderr, "file %s: line %d: sct[%d][%d].people = %d\n", __file__, __line__, x, y, sptr->people );
				if( sptr->people < -1*ABSMAXPEOPLE )
					sptr->people = ABSMAXPEOPLE;
				else sptr->people = 0;
			}

			if( sptr->owner != 0 && sptr->altitude == WATER ) {
				fprintf( stderr, "file %s: line %d: sct[%d][%d].owner = %s (a water sector)\n",__file__,__line__, x, y, ntn[sptr->owner].name );
				sptr->owner = 0;
			}
			if( sptr->fortress > 12 ){
				fprintf( stderr, "file %s: line %d: sct[%d][%d].fortress = %d \n",__file__,__line__, x, y, sptr->fortress );
				sptr->fortress = 12;
			}
		} /* for */
	} /* for */
} /* verify_sct() */

void
verifydata( __file__, __line__ )
char	__file__[];
int	__line__;
{
	/* check for invalid values */
	verify_ntn( __file__, __line__ );
	verify_sct( __file__, __line__ );
}/* verifydata() */

#ifdef DEBUG
void
checkout(file,line)
int	line;
char	*file;
{
	/* fprintf(stderr,"file %s line %d\n",file,line);  */
	/* verifydata(file,line); */
}
#endif DEBUG

#include <fcntl.h>
#ifdef FILELOCK
#include <sys/file.h>
#endif FILELOCK

/*
 * check_lock() -- routine to check if a file is locked.
 *   - returns true if a lock is active false is not.
 *   - setting keeplock to true means leaves lock active
 *      if it is not already active.
 */
int
check_lock(filename,keeplock)
	char *filename;
	int keeplock;
{
	int hold=FALSE;
#ifdef FILELOCK
	int fd;

	if ((fd=open(filename,O_CREAT,0600))!=(-1)) {
		if(flock(fd, LOCK_EX|LOCK_NB)==(-1)) {
			hold=TRUE;
		}
		/* remove lock after checking */
		if(keeplock==FALSE && hold==FALSE) {
			close(fd);
			unlink(filename);
		}
	} else {
		printf("error opening lock file <%s>\n",filename);
		exit(FAIL);
	}
#else
	if( access( filename, 00 ) == 0 ) {
		hold=TRUE;
	}
	if (hold==FALSE && keeplock==TRUE) {
		/* create lock file */
		if(open(filename,O_CREAT,0600)==(-1)) {
			printf("error opening lock file <%s>\n",filename);
			exit(FAIL);
		}
	}
#endif FILELOCK
	return(hold);
}