* Copyright (c) 1980 Regents of the University of California.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* 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
static char sccsid
[] = "@(#)execute.c 5.5 (Berkeley) 2/28/91";
typedef struct stat STAT
;
extern char etext
[], /* end of text space */
*yn_only
[] = { "yes", "no"};
static bool new_play
; /* set if move on to new player */
* This routine executes the given command by index number
new_play
= FALSE
; /* new_play is true if fixing */
printf("%s rolled doubles. Goes again\n", cur_p
->name
);
* This routine moves a piece around.
new_play
= was_jail
= FALSE
;
printf("roll is %d, %d\n", r1
=roll(1, 6), r2
=roll(1, 6));
if (cur_p
->loc
== JAIL
) {
if (!move_jail(r1
, r2
)) {
if (r1
== r2
&& ++num_doub
== 3) {
printf("That's 3 doubles. You go to jail\n");
if (r1
!= r2
|| was_jail
)
* This routine moves a normal move
cur_p
->loc
= (cur_p
->loc
+ rl
) % N_SQRS
;
if (cur_p
->loc
< old_loc
&& rl
> 0) {
printf("You pass %s and get $200\n", board
[0].name
);
* This routine shows the results of a move
sqp
= &board
[cur_p
->loc
];
printf("That puts you on %s\n", sqp
->name
);
printf("That is a safe place\n");
printf("That would cost $%d\n", sqp
->cost
);
if (getyn("Do you want to buy? ") == 0) {
cur_p
->money
-= sqp
->cost
;
else if (sqp
->owner
== player
)
* This routine saves the current game for use at a later date
printf("Which file do you wish to save it in? ");
while ((*sp
++=getchar()) != '\n')
* check for existing files, and confirm overwrite if needed
&& getyn("File exists. Do you wish to overwrite? ", yn_only
) > 0)
if ((outf
=creat(buf
, 0644)) < 0) {
time(&t
); /* get current time */
for (sp
= buf
; *sp
!= '\n'; sp
++)
start
= (((int) etext
+ (SEGSIZE
-1)) / SEGSIZE
) * SEGSIZE
;
while (start
< end
) { /* write out entire data space */
num
= start
+ 16 * 1024 > end
? end
- start
: 16 * 1024;
* This routine restores an old game from a file
printf("Which file do you wish to restore from? ");
for (sp
= buf
; (*sp
=getchar()) != '\n'; sp
++)
* This does the actual restoring. It returns TRUE if the
* backup was successful, else false.
if ((inf
=open(file
, 0)) < 0) {
if (fstat(inf
, &sbuf
) < 0) { /* get file stats */
start
= (((int) etext
+ (SEGSIZE
-1)) / SEGSIZE
) * SEGSIZE
;
brk(end
= start
+ sbuf
.st_size
);
while (start
< end
) { /* write out entire data space */
num
= start
+ 16 * 1024 > end
? end
- start
: 16 * 1024;
strcpy(buf
, ctime(&sbuf
.st_mtime
));
for (sp
= buf
; *sp
!= '\n'; sp
++)