]>
git.cameronkatri.com Git - bsdgames-darwin.git/blob - monop/execute.c
2 * Copyright (c) 1980 Regents of the University of California.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. All advertising materials mentioning features or use of this software
14 * must display the following acknowledgement:
15 * This product includes software developed by the University of
16 * California, Berkeley and its contributors.
17 * 4. Neither the name of the University nor the names of its contributors
18 * may be used to endorse or promote products derived from this software
19 * without specific prior written permission.
21 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
35 /*static char sccsid[] = "from: @(#)execute.c 5.5 (Berkeley) 2/28/91";*/
36 static char rcsid
[] = "$Id: execute.c,v 1.2 1993/08/01 18:53:43 mycroft Exp $";
40 # include <sys/types.h>
41 # include <sys/stat.h>
42 # include <sys/time.h>
46 typedef struct stat STAT
;
47 typedef struct tm TIME
;
49 extern char etext
[], /* end of text space */
53 *yn_only
[] = { "yes", "no"};
55 static bool new_play
; /* set if move on to new player */
58 * This routine executes the given command by index number
63 new_play
= FALSE
; /* new_play is true if fixing */
70 printf("%s rolled doubles. Goes again\n", cur_p
->name
);
73 * This routine moves a piece around.
80 new_play
= was_jail
= FALSE
;
81 printf("roll is %d, %d\n", r1
=roll(1, 6), r2
=roll(1, 6));
82 if (cur_p
->loc
== JAIL
) {
84 if (!move_jail(r1
, r2
)) {
90 if (r1
== r2
&& ++num_doub
== 3) {
91 printf("That's 3 doubles. You go to jail\n");
98 if (r1
!= r2
|| was_jail
)
104 * This routine moves a normal move
111 old_loc
= cur_p
->loc
;
112 cur_p
->loc
= (cur_p
->loc
+ rl
) % N_SQRS
;
113 if (cur_p
->loc
< old_loc
&& rl
> 0) {
115 printf("You pass %s and get $200\n", board
[0].name
);
120 * This routine shows the results of a move
126 sqp
= &board
[cur_p
->loc
];
127 printf("That puts you on %s\n", sqp
->name
);
130 printf("That is a safe place\n");
145 if (sqp
->owner
< 0) {
146 printf("That would cost $%d\n", sqp
->cost
);
147 if (getyn("Do you want to buy? ") == 0) {
149 cur_p
->money
-= sqp
->cost
;
151 else if (num_play
> 2)
154 else if (sqp
->owner
== player
)
155 printf("You own it.\n");
161 * This routine saves the current game for use at a later date
172 printf("Which file do you wish to save it in? ");
174 while ((*sp
++=getchar()) != '\n')
179 * check for existing files, and confirm overwrite if needed
182 if (stat(buf
, &sb
) > -1
183 && getyn("File exists. Do you wish to overwrite? ", yn_only
) > 0)
186 if ((outf
=creat(buf
, 0644)) < 0) {
190 printf("\"%s\" ", buf
);
191 time(&t
); /* get current time */
192 strcpy(buf
, ctime(&t
));
193 for (sp
= buf
; *sp
!= '\n'; sp
++)
197 start
= (((int) etext
+ (SEGSIZE
-1)) / SEGSIZE
) * SEGSIZE
;
202 while (start
< end
) { /* write out entire data space */
203 num
= start
+ 16 * 1024 > end
? end
- start
: 16 * 1024;
204 write(outf
, start
, num
);
208 printf("[%s]\n", buf
);
211 * This routine restores an old game from a file
217 printf("Which file do you wish to restore from? ");
218 for (sp
= buf
; (*sp
=getchar()) != '\n'; sp
++)
224 * This does the actual restoring. It returns TRUE if the
225 * backup was successful, else false.
236 if ((inf
=open(file
, 0)) < 0) {
240 printf("\"%s\" ", file
);
241 if (fstat(inf
, &sbuf
) < 0) { /* get file stats */
246 start
= (((int) etext
+ (SEGSIZE
-1)) / SEGSIZE
) * SEGSIZE
;
250 brk(end
= start
+ sbuf
.st_size
);
251 while (start
< end
) { /* write out entire data space */
252 num
= start
+ 16 * 1024 > end
? end
- start
: 16 * 1024;
253 read(inf
, start
, num
);
257 strcpy(buf
, ctime(&sbuf
.st_mtime
));
258 for (sp
= buf
; *sp
!= '\n'; sp
++)
261 printf("[%s]\n", buf
);