Difference between revisions of "Source:NetHack 1.4f/rumors.c"

From NetHackWiki
Jump to navigation Jump to search
m (Automated source code upload)
 
m (NetHack 1.4f/rumors.c moved to Source:NetHack 1.4f/rumors.c: Robot: moved page)
 
(One intermediate revision by one other user not shown)
Line 1: Line 1:
Below is the full text to '''rumors.c''' from the [[NetHack 1.4f source code|source code]] of [[NetHack 1.4f]]. To link to a particular line, write [[NetHack 1.4f/rumors.c#line123|<nowiki>[[NetHack 1.4f/rumors.c#line123]]</nowiki>]], for example.
+
The source code file '''rumors.c''' in [[NetHack 1.4f source code|NetHack 1.4f]] is unchanged from [[NetHack 1.3d/rumors.c]].
 
+
[[Category:NetHack 1.4f source code]]
'''Warning!''' This is the source code from an old release. For the latest release, see [[Source code]]
 
 
 
{{CWI}}
 
<span id="line1">1.   /* SCCS Id: @(#)rumors.c 1.3 87/07/14</span>
 
<span id="line2">2.    /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */</span>
 
<span id="line3">3.    /* hack.rumors.c - version 1.0.3 */</span>
 
<span id="line4">4.    </span>
 
<span id="line5">5.    #include <stdio.h></span>
 
<span id="line6">6.    #include "hack.h" /* for RUMORFILE and BSD (index) */</span>
 
<span id="line7">7.    #ifdef DGK</span>
 
<span id="line8">8.    /* Rumors has been entirely rewritten to speed up the access.  This is</span>
 
<span id="line9">9.    * essential when working from floppies.  Using fseek() the way that's done</span>
 
<span id="line10">10.    * here means rumors following longer rumors are output more often than those</span>
 
<span id="line11">11.    * following shorter rumors.  Also, you may see the same rumor more than once</span>
 
<span id="line12">12.    * in a particular game (although the odds are highly against it), but</span>
 
<span id="line13">13.    * this also happens with real fortune cookies.  Besides, a person can</span>
 
<span id="line14">14.    * just read the rumor file if they desire.  -dgk</span>
 
<span id="line15">15.    */</span>
 
<span id="line16">16.  long rumors_size;</span>
 
<span id="line17">17.  extern char *index();</span>
 
<span id="line18">18.  extern long ftell();</span>
 
<span id="line19">19.  </span>
 
<span id="line20">20.  outrumor()</span>
 
<span id="line21">21.  {</span>
 
<span id="line22">22.  char line[COLNO];</span>
 
<span id="line23">23.  char *endp;</span>
 
<span id="line24">24.  char roomer[FILENAME];</span>
 
<span id="line25">25.  FILE *rumors;</span>
 
<span id="line26">26.  </span>
 
<span id="line27">27.  if (rumors_size < 0) /* We couldn't open RUMORFILE */</span>
 
<span id="line28">28.  return;</span>
 
<span id="line29">29.  if(rumors = fopen(RUMORFILE, "r")) {</span>
 
<span id="line30">30.  if (!rumors_size) { /* if this is the first outrumor() */</span>
 
<span id="line31">31.  fseek(rumors, 0L, 2);</span>
 
<span id="line32">32.  rumors_size = ftell(rumors);</span>
 
<span id="line33">33.  }</span>
 
<span id="line34">34.  fseek(rumors, rand() % rumors_size, 0);</span>
 
<span id="line35">35.  fgets(line, COLNO, rumors);</span>
 
<span id="line36">36.  if (!fgets(line, COLNO, rumors)) { /* at EOF ? */</span>
 
<span id="line37">37.  fseek(rumors, 0L, 0); /* seek back to start */</span>
 
<span id="line38">38.  fgets(line, COLNO, rumors);</span>
 
<span id="line39">39.   }</span>
 
<span id="line40">40.  if(endp = index(line, '\n')) *endp = 0;</span>
 
<span id="line41">41.  pline("This cookie has a scrap of paper inside! It reads: ");</span>
 
<span id="line42">42.  pline(line);</span>
 
<span id="line43">43.  fclose(rumors);</span>
 
<span id="line44">44.  } else {</span>
 
<span id="line45">45.  pline("Can't open rumors file!");</span>
 
<span id="line46">46.  rumors_size = -1; /* don't try to open it again */</span>
 
<span id="line47">47.  }</span>
 
<span id="line48">48.  }</span>
 
<span id="line49">49.  </span>
 
<span id="line50">50.  #else</span>
 
<span id="line51">51.  </span>
 
<span id="line52">52.  #define CHARSZ 8 /* number of bits in a char */</span>
 
<span id="line53">53.  extern long *alloc();</span>
 
<span id="line54">54.  extern char *index();</span>
 
<span id="line55">55.  int n_rumors = 0;</span>
 
<span id="line56">56.  int n_used_rumors = -1;</span>
 
<span id="line57">57.  char *usedbits;</span>
 
<span id="line58">58.  </span>
 
<span id="line59">59.  init_rumors(rumf) register FILE *rumf; {</span>
 
<span id="line60">60.  register int i;</span>
 
<span id="line61">61.  n_used_rumors = 0;</span>
 
<span id="line62">62.  while(skipline(rumf)) n_rumors++;</span>
 
<span id="line63">63.  rewind(rumf);</span>
 
<span id="line64">64.  i = n_rumors/CHARSZ;</span>
 
<span id="line65">65.  usedbits = (char *) alloc((unsigned)(i+1));</span>
 
<span id="line66">66.  for( ; i>=0; i--) usedbits[i] = 0;</span>
 
<span id="line67">67.  }</span>
 
<span id="line68">68.  </span>
 
<span id="line69">69.  skipline(rumf) register FILE *rumf; {</span>
 
<span id="line70">70.  char line[COLNO];</span>
 
<span id="line71">71.  while(1) {</span>
 
<span id="line72">72.  if(!fgets(line, sizeof(line), rumf)) return(0);</span>
 
<span id="line73">73.  if(index(line, '\n')) return(1);</span>
 
<span id="line74">74.  }</span>
 
<span id="line75">75.  }</span>
 
<span id="line76">76.  </span>
 
<span id="line77">77.  outline(rumf) register FILE *rumf; {</span>
 
<span id="line78">78.  char line[COLNO];</span>
 
<span id="line79">79.  register char *ep;</span>
 
<span id="line80">80.  if(!fgets(line, sizeof(line), rumf)) return;</span>
 
<span id="line81">81.  if((ep = index(line, '\n')) != 0) *ep = 0;</span>
 
<span id="line82">82.  pline("This cookie has a scrap of paper inside! It reads: ");</span>
 
<span id="line83">83.  pline(line);</span>
 
<span id="line84">84.  }</span>
 
<span id="line85">85.  </span>
 
<span id="line86">86.  outrumor(){</span>
 
<span id="line87">87.  register int rn,i;</span>
 
<span id="line88">88.  register FILE *rumf;</span>
 
<span id="line89">89.  if(n_rumors <= n_used_rumors ||</span>
 
<span id="line90">90.    (rumf = fopen(RUMORFILE, "r")) == (FILE *) 0) return;</span>
 
<span id="line91">91.  if(n_used_rumors < 0) init_rumors(rumf);</span>
 
<span id="line92">92.  if(!n_rumors) goto none;</span>
 
<span id="line93">93.  rn = rn2(n_rumors - n_used_rumors);</span>
 
<span id="line94">94.  i = 0;</span>
 
<span id="line95">95.  while(rn || used(i)) {</span>
 
<span id="line96">96.  (void) skipline(rumf);</span>
 
<span id="line97">97.  if(!used(i)) rn--;</span>
 
<span id="line98">98.  i++;</span>
 
<span id="line99">99.  }</span>
 
<span id="line100">100.  usedbits[i/CHARSZ] |= (1 << (i % CHARSZ));</span>
 
<span id="line101">101.  n_used_rumors++;</span>
 
<span id="line102">102.  outline(rumf);</span>
 
<span id="line103">103.  none:</span>
 
<span id="line104">104.  (void) fclose(rumf);</span>
 
<span id="line105">105.  }</span>
 
<span id="line106">106.  </span>
 
<span id="line107">107.  used(i) register int i; {</span>
 
<span id="line108">108.  return(usedbits[i/CHARSZ] & (1 << (i % CHARSZ)));</span>
 
<span id="line109">109.  }</span>
 
<span id="line110">110.  </span>
 
<span id="line111">111.  #endif /* DGK /**/</span>
 
[[Category:NetHack 1.4f source code|rumors.c]]
 

Latest revision as of 01:32, 4 March 2008

The source code file rumors.c in NetHack 1.4f is unchanged from NetHack 1.3d/rumors.c.