1 1.1 cgd /* savelev.c Larn is copyrighted 1986 by Noah Morgan. */ 2 1.1 cgd #include "header.h" 3 1.1 cgd extern struct cel *cell; 4 1.1 cgd 5 1.1 cgd /* 6 1.1 cgd * routine to save the present level into storage 7 1.1 cgd */ 8 1.1 cgd savelevel() 9 1.1 cgd { 10 1.1 cgd register struct cel *pcel; 11 1.1 cgd register char *pitem,*pknow,*pmitem; 12 1.1 cgd register short *phitp,*piarg; 13 1.1 cgd register struct cel *pecel; 14 1.1 cgd pcel = &cell[level*MAXX*MAXY]; /* pointer to this level's cells */ 15 1.1 cgd pecel = pcel + MAXX*MAXY; /* pointer to past end of this level's cells */ 16 1.1 cgd pitem=item[0]; piarg=iarg[0]; pknow=know[0]; pmitem=mitem[0]; phitp=hitp[0]; 17 1.1 cgd while (pcel < pecel) 18 1.1 cgd { 19 1.1 cgd pcel->mitem = *pmitem++; 20 1.1 cgd pcel->hitp = *phitp++; 21 1.1 cgd pcel->item = *pitem++; 22 1.1 cgd pcel->know = *pknow++; 23 1.1 cgd pcel++->iarg = *piarg++; 24 1.1 cgd } 25 1.1 cgd } 26 1.1 cgd 27 1.1 cgd /* 28 1.1 cgd * routine to restore a level from storage 29 1.1 cgd */ 30 1.1 cgd getlevel() 31 1.1 cgd { 32 1.1 cgd register struct cel *pcel; 33 1.1 cgd register char *pitem,*pknow,*pmitem; 34 1.1 cgd register short *phitp,*piarg; 35 1.1 cgd register struct cel *pecel; 36 1.1 cgd pcel = &cell[level*MAXX*MAXY]; /* pointer to this level's cells */ 37 1.1 cgd pecel = pcel + MAXX*MAXY; /* pointer to past end of this level's cells */ 38 1.1 cgd pitem=item[0]; piarg=iarg[0]; pknow=know[0]; pmitem=mitem[0]; phitp=hitp[0]; 39 1.1 cgd while (pcel < pecel) 40 1.1 cgd { 41 1.1 cgd *pmitem++ = pcel->mitem; 42 1.1 cgd *phitp++ = pcel->hitp; 43 1.1 cgd *pitem++ = pcel->item; 44 1.1 cgd *pknow++ = pcel->know; 45 1.1 cgd *piarg++ = pcel++->iarg; 46 1.1 cgd } 47 1.1 cgd } 48