⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 execute.c

📁 linux 下的源代码分析阅读器 red hat公司新版
💻 C
字号:
/*	$NetBSD: execute.c,v 1.5 1998/09/11 13:54:08 hubertf Exp $	*//* * Copyright (c) 1980, 1993 *	The Regents of the University of California.  All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software *    must display the following acknowledgement: *	This product includes software developed by the University of *	California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors *    may be used to endorse or promote products derived from this software *    without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */#include <sys/cdefs.h>#ifndef lint#if 0static char sccsid[] = "@(#)execute.c	8.1 (Berkeley) 5/31/93";#else__RCSID("$NetBSD: execute.c,v 1.5 1998/09/11 13:54:08 hubertf Exp $");#endif#endif /* not lint */#include "monop.ext"#include <fcntl.h>#include <stdlib.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <sys/time.h># define	SEGSIZE	8192typedef	struct stat	STAT;typedef	struct tm	TIME;static char	buf[257];static bool	new_play;	/* set if move on to new player		*/static void show_move __P((void));/* *	This routine executes the given command by index number */voidexecute(com_num)int	com_num; {	new_play = FALSE;	/* new_play is true if fixing	*/	(*func[com_num])();	notify();	force_morg();	if (new_play)		next_play();	else if (num_doub)		printf("%s rolled doubles.  Goes again\n", cur_p->name);}/* *	This routine moves a piece around. */voiddo_move() {	int		r1, r2;	bool	was_jail;	new_play = was_jail = FALSE;	printf("roll is %d, %d\n", r1=roll(1, 6), r2=roll(1, 6));	if (cur_p->loc == JAIL) {		was_jail++;		if (!move_jail(r1, r2)) {			new_play++;			goto ret;		}	}	else {		if (r1 == r2 && ++num_doub == 3) {			printf("That's 3 doubles.  You go to jail\n");			goto_jail();			new_play++;			goto ret;		}		move(r1+r2);	}	if (r1 != r2 || was_jail)		new_play++;ret:	return;}/* *	This routine moves a normal move */voidmove(rl)int	rl; {	int	old_loc;	old_loc = cur_p->loc;	cur_p->loc = (cur_p->loc + rl) % N_SQRS;	if (cur_p->loc < old_loc && rl > 0) {		cur_p->money += 200;		printf("You pass %s and get $200\n", board[0].name);	}	show_move();}/* *	This routine shows the results of a move */static voidshow_move() {	SQUARE	*sqp;	sqp = &board[cur_p->loc];	printf("That puts you on %s\n", sqp->name);	switch (sqp->type) {	  case SAFE:		printf("That is a safe place\n");		break;	  case CC:		cc(); break;	  case CHANCE:		chance(); break;	  case INC_TAX:		inc_tax(); break;	  case GOTO_J:		goto_jail(); break;	  case LUX_TAX:		lux_tax(); break;	  case PRPTY:	  case RR:	  case UTIL:		if (sqp->owner < 0) {			printf("That would cost $%d\n", sqp->cost);			if (getyn("Do you want to buy? ") == 0) {				buy(player, sqp);				cur_p->money -= sqp->cost;			}			else if (num_play > 2)				bid();		}		else if (sqp->owner == player)			printf("You own it.\n");		else			rent(sqp);	}}/* *	This routine saves the current game for use at a later date */voidsave() {	char	*sp;	int		outf, num;	time_t		t;	struct stat	sb;	char 		*start, *end;	printf("Which file do you wish to save it in? ");	sp = buf;	while ((*sp++=getchar()) != '\n')		continue;	*--sp = '\0';	/*	 * check for existing files, and confirm overwrite if needed	 */	if (stat(buf, &sb) > -1	    && getyn("File exists.  Do you wish to overwrite? ") > 0)		return;	if ((outf=creat(buf, 0644)) < 0) {		perror(buf);		return;	}	printf("\"%s\" ", buf);	time(&t);			/* get current time		*/	strcpy(buf, ctime(&t));	for (sp = buf; *sp != '\n'; sp++)		continue;	*sp = '\0';	start = 0;	end = sbrk(0);	while (start < end) {		/* write out entire data space */		num = start + 16 * 1024 > end ? end - start : 16 * 1024;		write(outf, start, num);		start += num;	}	close(outf);	printf("[%s]\n", buf);}/* *	This routine restores an old game from a file */voidrestore() {	char	*sp;	printf("Which file do you wish to restore from? ");	for (sp = buf; (*sp=getchar()) != '\n'; sp++)		continue;	*sp = '\0';	rest_f(buf);}/* *	This does the actual restoring.  It returns TRUE if the * backup was successful, else false. */intrest_f(file)	const char	*file; {	char	*sp;	int		inf, num;	char		buf[80];	char 		*start, *end;	STAT		sbuf;	if ((inf=open(file, O_RDONLY)) < 0) {		perror(file);		return FALSE;	}	printf("\"%s\" ", file);	if (fstat(inf, &sbuf) < 0) {		/* get file stats	*/		perror(file);		exit(1);	}	start = 0;	brk(end = start + sbuf.st_size);	while (start < end) {		/* write out entire data space */		num = start + 16 * 1024 > end ? end - start : 16 * 1024;		read(inf, start, num);		start += num;	}	close(inf);	strcpy(buf, ctime(&sbuf.st_mtime));	for (sp = buf; *sp != '\n'; sp++)		continue;	*sp = '\0';	printf("[%s]\n", buf);	return TRUE;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -