xref: /netbsd/games/larn/savelev.c (revision adf10d74)
1 /*	$NetBSD: savelev.c,v 1.7 2012/06/19 05:30:44 dholland Exp $	*/
2 
3 /* savelev.c		 Larn is copyrighted 1986 by Noah Morgan. */
4 #include <sys/cdefs.h>
5 #ifndef lint
6 __RCSID("$NetBSD: savelev.c,v 1.7 2012/06/19 05:30:44 dholland Exp $");
7 #endif				/* not lint */
8 #include "header.h"
9 #include "extern.h"
10 
11 /*
12  *	routine to save the present level into storage
13  */
14 void
savelevel(void)15 savelevel(void)
16 {
17 	struct cel *pcel;
18 	u_char  *pitem, *pknow, *pmitem;
19 	short *phitp, *piarg;
20 	struct cel *pecel;
21 	pcel = &cell[level * MAXX * MAXY];	/* pointer to this level's
22 						 * cells */
23 	pecel = pcel + MAXX * MAXY;	/* pointer to past end of this
24 					 * level's cells */
25 	pitem = item[0];
26 	piarg = iarg[0];
27 	pknow = know[0];
28 	pmitem = mitem[0];
29 	phitp = hitp[0];
30 	while (pcel < pecel) {
31 		pcel->mitem = *pmitem++;
32 		pcel->hitp = *phitp++;
33 		pcel->item = *pitem++;
34 		pcel->know = *pknow++;
35 		pcel->iarg = *piarg++;
36 		pcel++;
37 	}
38 }
39 
40 /*
41  *	routine to restore a level from storage
42  */
43 void
getlevel(void)44 getlevel(void)
45 {
46 	struct cel *pcel;
47 	u_char  *pitem, *pknow, *pmitem;
48 	short *phitp, *piarg;
49 	struct cel *pecel;
50 	pcel = &cell[level * MAXX * MAXY];	/* pointer to this level's
51 						 * cells */
52 	pecel = pcel + MAXX * MAXY;	/* pointer to past end of this
53 					 * level's cells */
54 	pitem = item[0];
55 	piarg = iarg[0];
56 	pknow = know[0];
57 	pmitem = mitem[0];
58 	phitp = hitp[0];
59 	while (pcel < pecel) {
60 		*pmitem++ = pcel->mitem;
61 		*phitp++ = pcel->hitp;
62 		*pitem++ = pcel->item;
63 		*pknow++ = pcel->know;
64 		*piarg++ = pcel->iarg;
65 		pcel++;
66 	}
67 }
68