Difference between revisions of "Source:Hack 1.0/savelev.h"

From NetHackWiki
Jump to navigation Jump to search
m (Automated source code upload)
 
(Part 15 has been found; replace content with the savelev.h from part 15)
 
(2 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 
Below is the full text to '''savelev.h''' from the [[Hack 1.0 source code|source code]] of [[Hack 1.0]]. To link to a particular line, write [[Hack 1.0/savelev.h#line123|<nowiki>[[Hack 1.0/savelev.h#line123]]</nowiki>]], for example.
 
Below is the full text to '''savelev.h''' from the [[Hack 1.0 source code|source code]] of [[Hack 1.0]]. To link to a particular line, write [[Hack 1.0/savelev.h#line123|<nowiki>[[Hack 1.0/savelev.h#line123]]</nowiki>]], for example.
  
'''Warning!''' This is the source code from an old release. For the latest release, see [[Source code]]
+
'''Warning!''' This is the source code from an old release. For the latest release, see [[Source code]].
  
 
{{CWI}}
 
{{CWI}}
 
  <span id="line1">1.    /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1984. */</span>
 
  <span id="line1">1.    /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1984. */</span>
 
  <span id="line2">2.    </span>
 
  <span id="line2">2.    </span>
  <span id="line3">3.    #include "hack.h"</span>
+
  <span id="line3">3.    #ifdef MKLEV</span>
  <span id="line4">4.    #include <stdio.h></span>
+
  <span id="line4">4.    </span>
  <span id="line5">5.    extern struct monst *restmonchn();</span>
+
  <span id="line5">5.    savelev(){</span>
  <span id="line6">6.   extern struct obj *restobjchn();</span>
+
  <span id="line6">6.   int fd;</span>
  <span id="line7">7.    extern struct obj *billobjs;</span>
+
  <span id="line7">7.    </span>
  <span id="line8">8.    extern char *itoa();</span>
+
  <span id="line8">8.    #else</span>
  <span id="line9">9.    </span>
+
  <span id="line9">9.    extern struct obj *billobjs;</span>
  <span id="line10">10.  extern char nul[];</span>
+
  <span id="line10">10.  </span>
  <span id="line11">11.  #ifndef NOWORM</span>
+
  <span id="line11">11.  savelev(fd){</span>
  <span id="line12">12.  #include "def.wseg.h"</span>
+
  <span id="line12">12.  #ifndef NOWORM</span>
  <span id="line13">13.   </span>
+
  <span id="line13">13.   register struct wseg *wtmp, *wtmp2;</span>
  <span id="line14">14.   extern struct wseg *wsegs[32], *wheads[32];</span>
+
  <span id="line14">14.   register tmp;</span>
  <span id="line15">15.  extern long wgrowtime[32];</span>
+
  <span id="line15">15.  #endif NOWORM</span>
  <span id="line16">16.  #endif NOWORM</span>
+
  <span id="line16">16.  </span>
  <span id="line17">17.  </span>
+
  <span id="line17">17.  #endif MKLEV</span>
  <span id="line18">18.  savelev(fd){</span>
+
  <span id="line18">18.  </span>
  <span id="line19">19.  #ifndef NOWORM</span>
+
  <span id="line19">19.  #ifdef MKLEV</span>
  <span id="line20">20.  register struct wseg *wtmp, *wtmp2;</span>
+
  <span id="line20">20.  if((fd = creat(tfile,FMASK)) < 0) panic("Cannot create %s\n", tfile);</span>
  <span id="line21">21.   register int tmp;</span>
+
  <span id="line21">21.   #else</span>
  <span id="line22">22.   #endif NOWORM</span>
+
  <span id="line22">22.   if(fd < 0) panic("Save on bad file!");</span>
  <span id="line23">23.  </span>
+
  <span id="line23">23.  #endif MKLEV</span>
  <span id="line24">24.  if(fd < 0)</span>
+
  <span id="line24">24.  bwrite(fd,(char *) levl,sizeof(levl));</span>
  <span id="line25">25.             panic("Save on bad file!");</span>
+
  <span id="line25">25.   #ifdef MKLEV</span>
  <span id="line26">26.   </span>
+
  <span id="line26">26.   bwrite(fd,(char *) nul,sizeof(long));</span>
  <span id="line27">27.   bwrite(fd,(char *) levl,sizeof(levl));</span>
+
  <span id="line27">27.   #else</span>
 
  <span id="line28">28.  bwrite(fd,(char *) &moves,sizeof(long));</span>
 
  <span id="line28">28.  bwrite(fd,(char *) &moves,sizeof(long));</span>
  <span id="line29">29.   bwrite(fd,(char *) &xupstair,sizeof(xupstair));</span>
+
  <span id="line29">29.   #endif MKLEV</span>
  <span id="line30">30.  bwrite(fd,(char *) &yupstair,sizeof(yupstair));</span>
+
  <span id="line30">30.  bwrite(fd,(char *) &xupstair,sizeof(xupstair));</span>
  <span id="line31">31.  bwrite(fd,(char *) &xdnstair,sizeof(xdnstair));</span>
+
  <span id="line31">31.  bwrite(fd,(char *) &yupstair,sizeof(yupstair));</span>
  <span id="line32">32.  bwrite(fd,(char *) &ydnstair,sizeof(ydnstair));</span>
+
  <span id="line32">32.  bwrite(fd,(char *) &xdnstair,sizeof(xdnstair));</span>
  <span id="line33">33.  savemonchn(fd, fmon);</span>
+
  <span id="line33">33.  bwrite(fd,(char *) &ydnstair,sizeof(ydnstair));</span>
  <span id="line34">34.  savegenchn(fd, fgold);</span>
+
  <span id="line34">34.  savemonchn(fd, fmon);</span>
  <span id="line35">35.  savegenchn(fd, ftrap);</span>
+
  <span id="line35">35.  savegenchn(fd, fgold);</span>
  <span id="line36">36.  saveobjchn(fd, fobj);</span>
+
  <span id="line36">36.  savegenchn(fd, ftrap);</span>
  <span id="line37">37.  saveobjchn(fd, billobjs);</span>
+
  <span id="line37">37.  saveobjchn(fd, fobj);</span>
  <span id="line38">38.  /* if (!ismklev) */</span>
+
  <span id="line38">38.  #ifdef MKLEV</span>
  <span id="line39">39.     billobjs = 0;</span>
+
  <span id="line39">39.   saveobjchn(fd, (struct obj *) 0);</span>
 
  <span id="line40">40.  bwrite(fd,(char *) nul, sizeof(unsigned));</span>
 
  <span id="line40">40.  bwrite(fd,(char *) nul, sizeof(unsigned));</span>
  <span id="line41">41.  #ifndef QUEST</span>
+
  <span id="line41">41.  #else</span>
  <span id="line42">42.  bwrite(fd,(char *) rooms,sizeof(rooms));</span>
+
  <span id="line42">42.  saveobjchn(fd, billobjs);</span>
  <span id="line43">43.  bwrite(fd,(char *) doors,sizeof(doors));</span>
+
  <span id="line43">43.  billobjs = 0;</span>
 
  <span id="line44">44.  save_engravings(fd);</span>
 
  <span id="line44">44.  save_engravings(fd);</span>
  <span id="line45">45.  #endif QUEST</span>
+
  <span id="line45">45.  #endif MKLEV</span>
  <span id="line46">46.  /* if (!ismklev) */</span>
+
  <span id="line46">46.  #ifndef QUEST</span>
  <span id="line47">47.     {</span>
+
  <span id="line47">47.   bwrite(fd,(char *) rooms,sizeof(rooms));</span>
  <span id="line48">48.     fgold = ftrap = 0;</span>
+
  <span id="line48">48.   bwrite(fd,(char *) doors,sizeof(doors));</span>
  <span id="line49">49.     fmon = 0;</span>
+
  <span id="line49">49.   #endif QUEST</span>
  <span id="line50">50.     fobj = 0;</span>
+
  <span id="line50">50.   fgold = ftrap = 0;</span>
  <span id="line51">51.     }</span>
+
  <span id="line51">51.   fmon = 0;</span>
  <span id="line52">52.  /*--------------------------------------------------------------------*/</span>
+
  <span id="line52">52.  fobj = 0;</span>
  <span id="line53">53.  #ifndef NOWORM</span>
+
<span id="line53">53#ifndef MKLEV</span>
  <span id="line54">54.  bwrite(fd,(char *) wsegs,sizeof(wsegs));</span>
+
<span id="line54">54.  /*--------------------------------------------------------------------*/</span>
  <span id="line55">55.  for(tmp=1; tmp<32; tmp++){</span>
+
  <span id="line55">55.  #ifndef NOWORM</span>
  <span id="line56">56.  for(wtmp = wsegs[tmp]; wtmp; wtmp = wtmp2){</span>
+
  <span id="line56">56.  bwrite(fd,(char *) wsegs,sizeof(wsegs));</span>
  <span id="line57">57.  wtmp2 = wtmp->nseg;</span>
+
  <span id="line57">57.  for(tmp=1; tmp<32; tmp++){</span>
  <span id="line58">58.  bwrite(fd,(char *) wtmp,sizeof(struct wseg));</span>
+
  <span id="line58">58.  for(wtmp = wsegs[tmp]; wtmp; wtmp = wtmp2){</span>
  <span id="line59">59.  }</span>
+
  <span id="line59">59.  wtmp2 = wtmp->nseg;</span>
  <span id="line60">60.   /* if (!ismklev) */</span>
+
  <span id="line60">60.  bwrite(fd,(char *) wtmp,sizeof(struct wseg));</span>
  <span id="line61">61.    wsegs[tmp] = 0;</span>
+
  <span id="line61">61.  }</span>
<span id="line62">62.  }</span>
+
  <span id="line62">62.   wsegs[tmp] = 0;</span>
  <span id="line63">63.  bwrite(fd,(char *) wgrowtime,sizeof(wgrowtime));</span>
+
  <span id="line63">63.  }</span>
  <span id="line64">64.  #endif NOWORM</span>
+
  <span id="line64">64.  bwrite(fd,(char *) wgrowtime,sizeof(wgrowtime));</span>
  <span id="line65">65.  /*--------------------------------------------------------------------*/</span>
+
  <span id="line65">65.  #endif NOWORM</span>
  <span id="line66">66}</span>
+
  <span id="line66">66.  /*--------------------------------------------------------------------*/</span>
  <span id="line67">67.  </span>
+
  <span id="line67">67#endif MKLEV</span>
  <span id="line68">68bwrite(fd,loc,num)</span>
+
  <span id="line68">68}</span>
  <span id="line69">69.  register int fd;</span>
+
  <span id="line69">69.  </span>
  <span id="line70">70.  register char *loc;</span>
+
  <span id="line70">70.  bwrite(fd,loc,num)</span>
  <span id="line71">71.  register unsigned num;</span>
+
<span id="line71">71.  register fd;</span>
  <span id="line72">72.  {</span>
+
  <span id="line72">72.  register char *loc;</span>
  <span id="line73">73.  /* lint wants the 3rd arg of write to be an int; lint -p an unsigned */</span>
+
  <span id="line73">73.  register unsigned num;</span>
  <span id="line74">74.  if(write(fd, loc, (int) num) != num)</span>
+
  <span id="line74">74.  {</span>
  <span id="line75">75.  panic("cannot write %d bytes to file #%d",num,fd);</span>
+
  <span id="line75">75.  /* lint wants the 3rd arg of write to be an int; lint -p an unsigned */</span>
  <span id="line76">76.  }</span>
+
  <span id="line76">76.  if(write(fd, loc, (int) num) != num)</span>
  <span id="line77">77.  </span>
+
  <span id="line77">77.  panic("cannot write %d bytes to file #%d",num,fd);</span>
  <span id="line78">78.  saveobjchn(fd,otmp)</span>
+
  <span id="line78">78.  }</span>
  <span id="line79">79.  register int fd;</span>
+
  <span id="line79">79.  </span>
  <span id="line80">80.  register struct obj *otmp;</span>
+
  <span id="line80">80.  saveobjchn(fd,otmp)</span>
  <span id="line81">81.  {</span>
+
  <span id="line81">81.  register fd;</span>
  <span id="line82">82.  register struct obj *otmp2;</span>
+
  <span id="line82">82.  register struct obj *otmp;</span>
  <span id="line83">83.  unsigned xl;</span>
+
  <span id="line83">83.  {</span>
  <span id="line84">84.  int minusone = -1;</span>
+
  <span id="line84">84.  register struct obj *otmp2;</span>
  <span id="line85">85.  </span>
+
  <span id="line85">85.  unsigned xl;</span>
  <span id="line86">86.  while(otmp) {</span>
+
  <span id="line86">86.  int minusone = -1;</span>
  <span id="line87">87.  otmp2 = otmp->nobj;</span>
+
  <span id="line87">87.  </span>
  <span id="line88">88.  xl = otmp->onamelth;</span>
+
  <span id="line88">88.  while(otmp) {</span>
  <span id="line89">89.  bwrite(fd, (char *) &xl, sizeof(int));</span>
+
  <span id="line89">89.  otmp2 = otmp->nobj;</span>
  <span id="line90">90.  bwrite(fd, (char *) otmp, xl + sizeof(struct obj));</span>
+
  <span id="line90">90.  xl = otmp->onamelth;</span>
  <span id="line91">91.   /* if (!ismklev) */</span>
+
  <span id="line91">91.  bwrite(fd, (char *) &xl, sizeof(int));</span>
  <span id="line92">92.  free((char *) otmp);</span>
+
  <span id="line92">92.  bwrite(fd, (char *) otmp, xl + sizeof(struct obj));</span>
<span id="line93">93.  otmp = otmp2;</span>
+
  <span id="line93">93.   free((char *) otmp);</span>
  <span id="line94">94.  }</span>
+
  <span id="line94">94.  otmp = otmp2;</span>
  <span id="line95">95.  bwrite(fd, (char *) &minusone, sizeof(int));</span>
+
  <span id="line95">95.  }</span>
  <span id="line96">96.  }</span>
+
  <span id="line96">96.  bwrite(fd, (char *) &minusone, sizeof(int));</span>
  <span id="line97">97.  </span>
+
  <span id="line97">97.  }</span>
  <span id="line98">98.  savemonchn(fd,mtmp)</span>
+
  <span id="line98">98.  </span>
  <span id="line99">99.   register int fd;</span>
+
  <span id="line99">99.  savemonchn(fd,mtmp)</span>
  <span id="line100">100.  register struct monst *mtmp;</span>
+
  <span id="line100">100. register fd;</span>
  <span id="line101">101.  {</span>
+
  <span id="line101">101.  register struct monst *mtmp;</span>
  <span id="line102">102.  register struct monst *mtmp2;</span>
+
  <span id="line102">102.  {</span>
  <span id="line103">103.  unsigned xl;</span>
+
  <span id="line103">103.  register struct monst *mtmp2;</span>
  <span id="line104">104.  int minusone = -1;</span>
+
  <span id="line104">104.  unsigned xl;</span>
  <span id="line105">105int monnum;</span>
+
  <span id="line105">105.  int minusone = -1;</span>
  <span id="line106">106#ifdef FUNNYRELOC</span>
+
  <span id="line106">106struct permonst *monbegin = &mons[0];</span>
  <span id="line107">107struct permonst *monbegin = &mons[0];</span>
+
  <span id="line107">107.  </span>
  <span id="line108">108.  </span>
+
  <span id="line108">108bwrite(fd, (char *) &monbegin, sizeof(monbegin));</span>
  <span id="line109">109bwrite(fd, (char *) &monbegin, sizeof(monbegin));</span>
+
  <span id="line109">109.  </span>
  <span id="line110">110. #endif</span>
+
  <span id="line110">110while(mtmp) {</span>
  <span id="line111">111. </span>
+
  <span id="line111">111. mtmp2 = mtmp->nmon;</span>
<span id="line112">112.  while(mtmp) {</span>
+
  <span id="line112">112. xl = mtmp->mxlth + mtmp->mnamelth;</span>
  <span id="line113">113.  mtmp2 = mtmp->nmon;</span>
+
  <span id="line113">113.  bwrite(fd, (char *) &xl, sizeof(int));</span>
  <span id="line114">114.  xl = mtmp->mxlth + mtmp->mnamelth;</span>
+
  <span id="line114">114.  bwrite(fd, (char *) mtmp, xl + sizeof(struct monst));</span>
  <span id="line115">115.  bwrite(fd, (char *) &xl, sizeof(int));</span>
+
  <span id="line115">115.  if(mtmp->minvent) saveobjchn(fd,mtmp->minvent);</span>
  <span id="line116">116. </span>
+
  <span id="line116">116. free((char *) mtmp);</span>
  <span id="line117">117.  /* JAT - just save the offset into the monster table, */</span>
+
  <span id="line117">117.  mtmp = mtmp2;</span>
  <span id="line118">118. /* it will be relocated when read in */</span>
+
  <span id="line118">118. }</span>
  <span id="line119">119. monnum = mtmp->data - &mons[0];</span>
+
  <span id="line119">119. bwrite(fd, (char *) &minusone, sizeof(int));</span>
  <span id="line120">120. mtmp->data = (struct permonst *)monnum;</span>
+
  <span id="line120">120. }</span>
  <span id="line121">121.  #ifdef DEBUGMON</span>
+
  <span id="line121">121.  </span>
  <span id="line122">122. myprintf("Wrote monster #%d", monnum);</span>
+
  <span id="line122">122. savegenchn(fd,gtmp)</span>
  <span id="line123">123.  #endif</span>
+
  <span id="line123">123.  register fd;</span>
  <span id="line124">124. bwrite(fd, (char *) mtmp, xl + sizeof(struct monst));</span>
+
  <span id="line124">124. register struct gen *gtmp;</span>
  <span id="line125">125. if(mtmp->minvent) saveobjchn(fd,mtmp->minvent);</span>
+
  <span id="line125">125. {</span>
<span id="line126">126. /* if (!ismklev) */</span>
+
<span id="line126">126. register struct gen *gtmp2;</span>
  <span id="line127">127.   free((char *) mtmp);</span>
+
  <span id="line127">127. while(gtmp) {</span>
  <span id="line128">128.  mtmp = mtmp2;</span>
+
  <span id="line128">128.  gtmp2 = gtmp->ngen;</span>
  <span id="line129">129. }</span>
+
  <span id="line129">129. bwrite(fd, (char *) gtmp, sizeof(struct gen));</span>
<span id="line130">130. bwrite(fd, (char *) &minusone, sizeof(int));</span>
+
<span id="line130">130. free((char *) gtmp);</span>
  <span id="line131">131. }</span>
+
  <span id="line131">131. gtmp = gtmp2;</span>
  <span id="line132">132. </span>
+
  <span id="line132">132. }</span>
  <span id="line133">133. savegenchn(fd,gtmp)</span>
+
  <span id="line133">133. bwrite(fd, nul, sizeof(struct gen));</span>
  <span id="line134">134.  register int fd;</span>
+
  <span id="line134">134.  }</span>
<span id="line135">135.  register struct gen *gtmp;</span>
 
<span id="line136">136.  {</span>
 
<span id="line137">137.  register struct gen *gtmp2;</span>
 
<span id="line138">138.  while(gtmp) {</span>
 
<span id="line139">139.  gtmp2 = gtmp->ngen;</span>
 
<span id="line140">140.  bwrite(fd, (char *) gtmp, sizeof(struct gen));</span>
 
<span id="line141">141.  /* if (!ismklev) */</span>
 
<span id="line142">142.    free((char *) gtmp);</span>
 
<span id="line143">143.  gtmp = gtmp2;</span>
 
<span id="line144">144.  }</span>
 
<span id="line145">145.  bwrite(fd, nul, sizeof(struct gen));</span>
 
<span id="line146">146.  }</span>
 
<span id="line147">147.  </span>
 
<span id="line148">148.  </span>
 
 
[[Category:Hack 1.0 source code|savelev.h]]
 
[[Category:Hack 1.0 source code|savelev.h]]

Latest revision as of 05:26, 31 October 2014

Below is the full text to savelev.h from the source code of Hack 1.0. To link to a particular line, write [[Hack 1.0/savelev.h#line123]], for example.

Warning! This is the source code from an old release. For the latest release, see Source code.

Screenshots and source code from Hack are used under the CWI license.

1.    /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1984. */
2.    
3.    #ifdef MKLEV
4.    
5.    savelev(){
6.    	int fd;
7.    
8.    #else
9.    extern struct obj *billobjs;
10.   
11.   savelev(fd){
12.   #ifndef NOWORM
13.   	register struct wseg *wtmp, *wtmp2;
14.   	register tmp;
15.   #endif NOWORM
16.   
17.   #endif MKLEV
18.   
19.   #ifdef MKLEV
20.   	if((fd = creat(tfile,FMASK)) < 0) panic("Cannot create %s\n", tfile);
21.   #else
22.   	if(fd < 0) panic("Save on bad file!");
23.   #endif MKLEV
24.   	bwrite(fd,(char *) levl,sizeof(levl));
25.   #ifdef MKLEV
26.   	bwrite(fd,(char *) nul,sizeof(long));
27.   #else
28.   	bwrite(fd,(char *) &moves,sizeof(long));
29.   #endif MKLEV
30.   	bwrite(fd,(char *) &xupstair,sizeof(xupstair));
31.   	bwrite(fd,(char *) &yupstair,sizeof(yupstair));
32.   	bwrite(fd,(char *) &xdnstair,sizeof(xdnstair));
33.   	bwrite(fd,(char *) &ydnstair,sizeof(ydnstair));
34.   	savemonchn(fd, fmon);
35.   	savegenchn(fd, fgold);
36.   	savegenchn(fd, ftrap);
37.   	saveobjchn(fd, fobj);
38.   #ifdef MKLEV
39.   	saveobjchn(fd, (struct obj *) 0);
40.   	bwrite(fd,(char *) nul, sizeof(unsigned));
41.   #else
42.   	saveobjchn(fd, billobjs);
43.   	billobjs = 0;
44.   	save_engravings(fd);
45.   #endif MKLEV
46.   #ifndef QUEST
47.   	bwrite(fd,(char *) rooms,sizeof(rooms));
48.   	bwrite(fd,(char *) doors,sizeof(doors));
49.   #endif QUEST
50.   	fgold = ftrap = 0;
51.   	fmon = 0;
52.   	fobj = 0;
53.   #ifndef MKLEV
54.   /*--------------------------------------------------------------------*/
55.   #ifndef NOWORM
56.   	bwrite(fd,(char *) wsegs,sizeof(wsegs));
57.   	for(tmp=1; tmp<32; tmp++){
58.   		for(wtmp = wsegs[tmp]; wtmp; wtmp = wtmp2){
59.   			wtmp2 = wtmp->nseg;
60.   			bwrite(fd,(char *) wtmp,sizeof(struct wseg));
61.   		}
62.   		wsegs[tmp] = 0;
63.   	}
64.   	bwrite(fd,(char *) wgrowtime,sizeof(wgrowtime));
65.   #endif NOWORM
66.   /*--------------------------------------------------------------------*/
67.   #endif MKLEV
68.   }
69.   
70.   bwrite(fd,loc,num)
71.   register fd;
72.   register char *loc;
73.   register unsigned num;
74.   {
75.   /* lint wants the 3rd arg of write to be an int; lint -p an unsigned */
76.   	if(write(fd, loc, (int) num) != num)
77.   		panic("cannot write %d bytes to file #%d",num,fd);
78.   }
79.   
80.   saveobjchn(fd,otmp)
81.   register fd;
82.   register struct obj *otmp;
83.   {
84.   	register struct obj *otmp2;
85.   	unsigned xl;
86.   	int minusone = -1;
87.   
88.   	while(otmp) {
89.   		otmp2 = otmp->nobj;
90.   		xl = otmp->onamelth;
91.   		bwrite(fd, (char *) &xl, sizeof(int));
92.   		bwrite(fd, (char *) otmp, xl + sizeof(struct obj));
93.   		free((char *) otmp);
94.   		otmp = otmp2;
95.   	}
96.   	bwrite(fd, (char *) &minusone, sizeof(int));
97.   }
98.   
99.   savemonchn(fd,mtmp)
100.  register fd;
101.  register struct monst *mtmp;
102.  {
103.  	register struct monst *mtmp2;
104.  	unsigned xl;
105.  	int minusone = -1;
106.  	struct permonst *monbegin = &mons[0];
107.  
108.  	bwrite(fd, (char *) &monbegin, sizeof(monbegin));
109.  
110.  	while(mtmp) {
111.  		mtmp2 = mtmp->nmon;
112.  		xl = mtmp->mxlth + mtmp->mnamelth;
113.  		bwrite(fd, (char *) &xl, sizeof(int));
114.  		bwrite(fd, (char *) mtmp, xl + sizeof(struct monst));
115.  		if(mtmp->minvent) saveobjchn(fd,mtmp->minvent);
116.  		free((char *) mtmp);
117.  		mtmp = mtmp2;
118.  	}
119.  	bwrite(fd, (char *) &minusone, sizeof(int));
120.  }
121.  
122.  savegenchn(fd,gtmp)
123.  register fd;
124.  register struct gen *gtmp;
125.  {
126.  	register struct gen *gtmp2;
127.  	while(gtmp) {
128.  		gtmp2 = gtmp->ngen;
129.  		bwrite(fd, (char *) gtmp, sizeof(struct gen));
130.  		free((char *) gtmp);
131.  		gtmp = gtmp2;
132.  	}
133.  	bwrite(fd, nul, sizeof(struct gen));
134.  }