xref: /netbsd/games/larn/savelev.c (revision bf9ec67e)
1 /*	$NetBSD: savelev.c,v 1.4 1997/10/18 20:03:45 christos 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.4 1997/10/18 20:03:45 christos 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
15 savelevel()
16 {
17 	struct cel *pcel;
18 	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 	}
37 }
38 
39 /*
40  *	routine to restore a level from storage
41  */
42 void
43 getlevel()
44 {
45 	struct cel *pcel;
46 	char  *pitem, *pknow, *pmitem;
47 	short *phitp, *piarg;
48 	struct cel *pecel;
49 	pcel = &cell[level * MAXX * MAXY];	/* pointer to this level's
50 						 * cells */
51 	pecel = pcel + MAXX * MAXY;	/* pointer to past end of this
52 					 * level's cells */
53 	pitem = item[0];
54 	piarg = iarg[0];
55 	pknow = know[0];
56 	pmitem = mitem[0];
57 	phitp = hitp[0];
58 	while (pcel < pecel) {
59 		*pmitem++ = pcel->mitem;
60 		*phitp++ = pcel->hitp;
61 		*pitem++ = pcel->item;
62 		*pknow++ = pcel->know;
63 		*piarg++ = pcel++->iarg;
64 	}
65 }
66