Difference between revisions of "Source:NetHack 3.6.0/src/botl.c"

From NetHackWiki
Jump to navigation Jump to search
m (Fix indents and break functions/sections)
 
Line 6: Line 6:
 
== Top of file ==
 
== Top of file ==
  
  <span id="line1">1.  /* NetHack 3.6 botl.c $NHDT-Date: 1447978683 2015/11/20 00:18:03 $  $NHDT-Branch: master $:$NHDT-Revision: 1.69 $ */</span>
+
  <span id="line1">1. /* NetHack 3.6 botl.c $NHDT-Date: 1447978683 2015/11/20 00:18:03 $  $NHDT-Branch: master $:$NHDT-Revision: 1.69 $ */</span>
  <span id="line2">2.  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */</span>
+
  <span id="line2">2. /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */</span>
  <span id="line3">3.  /* NetHack may be freely redistributed.  See license for details. */</span>
+
  <span id="line3">3. /* NetHack may be freely redistributed.  See license for details. */</span>
  <span id="line4">4.  </span>
+
  <span id="line4">4. </span>
  <span id="line5">5.  #include "hack.h"</span>
+
  <span id="line5">5. #include "hack.h"</span>
  <span id="line6">6.  #include <limits.h></span>
+
  <span id="line6">6. #include <limits.h></span>
  <span id="line7">7.  </span>
+
  <span id="line7">7. </span>
  <span id="line8">8.  extern const char *hu_stat[]; /* defined in eat.c */</span>
+
  <span id="line8">8. extern const char *hu_stat[]; /* defined in eat.c */</span>
  <span id="line9">9.  </span>
+
  <span id="line9">9. </span>
  <span id="line10">10.  const char *const enc_stat[] = { "",        "Burdened",  "Stressed",</span>
+
  <span id="line10">10. const char *const enc_stat[] = { "",        "Burdened",  "Stressed",</span>
  <span id="line11">11.                                  "Strained", "Overtaxed", "Overloaded" };</span>
+
  <span id="line11">11.                                  "Strained", "Overtaxed", "Overloaded" };</span>
  <span id="line12">12.  </span>
+
  <span id="line12">12. </span>
  <span id="line13">13.  STATIC_OVL NEARDATA int mrank_sz = 0; /* loaded by max_rank_sz (from u_init) */</span>
+
  <span id="line13">13. STATIC_OVL NEARDATA int mrank_sz = 0; /* loaded by max_rank_sz (from u_init) */</span>
  <span id="line14">14.  STATIC_DCL const char *NDECL(rank);</span>
+
  <span id="line14">14. STATIC_DCL const char *NDECL(rank);</span>
  <span id="line15">15.  </span>
+
  <span id="line15">15. </span>
  
 
== Status not via windowport ==
 
== Status not via windowport ==
 
      
 
      
  <span id="line16">16.  #ifndef STATUS_VIA_WINDOWPORT</span>
+
  <span id="line16">16. #ifndef STATUS_VIA_WINDOWPORT</span>
  <span id="line17">17.  </span>
+
  <span id="line17">17. </span>
  <span id="line18">18.  STATIC_DCL void NDECL(bot1);</span>
+
  <span id="line18">18. STATIC_DCL void NDECL(bot1);</span>
  <span id="line19">19.  STATIC_DCL void NDECL(bot2);</span>
+
  <span id="line19">19. STATIC_DCL void NDECL(bot2);</span>
  <span id="line20">20.  </span>
+
  <span id="line20">20. </span>
  
 
=== bot1 ===
 
=== bot1 ===
 
      
 
      
  <span id="line21">21.  STATIC_OVL void</span>
+
  <span id="line21">21. STATIC_OVL void</span>
  <span id="line22">22.  bot1()</span>
+
  <span id="line22">22. bot1()</span>
  <span id="line23">23.  {</span>
+
  <span id="line23">23. {</span>
  <span id="line24">24.      char newbot1[MAXCO];</span>
+
  <span id="line24">24.    char newbot1[MAXCO];</span>
  <span id="line25">25.      register char *nb;</span>
+
  <span id="line25">25.    register char *nb;</span>
  <span id="line26">26.      register int i, j;</span>
+
  <span id="line26">26.    register int i, j;</span>
  <span id="line27">27.  </span>
+
  <span id="line27">27. </span>
  <span id="line28">28.      Strcpy(newbot1, plname);</span>
+
  <span id="line28">28.    Strcpy(newbot1, plname);</span>
  <span id="line29">29.      if ('a' <= newbot1[0] && newbot1[0] <= 'z')</span>
+
  <span id="line29">29.    if ('a' <= newbot1[0] && newbot1[0] <= 'z')</span>
  <span id="line30">30.          newbot1[0] += 'A' - 'a';</span>
+
  <span id="line30">30.        newbot1[0] += 'A' - 'a';</span>
  <span id="line31">31.      newbot1[10] = 0;</span>
+
  <span id="line31">31.    newbot1[10] = 0;</span>
  <span id="line32">32.      Sprintf(nb = eos(newbot1), " the ");</span>
+
  <span id="line32">32.    Sprintf(nb = eos(newbot1), " the ");</span>
  <span id="line33">33.  </span>
+
  <span id="line33">33. </span>
  <span id="line34">34.      if (Upolyd) {</span>
+
  <span id="line34">34.    if (Upolyd) {</span>
  <span id="line35">35.          char mbot[BUFSZ];</span>
+
  <span id="line35">35.        char mbot[BUFSZ];</span>
  <span id="line36">36.          int k = 0;</span>
+
  <span id="line36">36.        int k = 0;</span>
  <span id="line37">37.  </span>
+
  <span id="line37">37. </span>
  <span id="line38">38.          Strcpy(mbot, mons[u.umonnum].mname);</span>
+
  <span id="line38">38.        Strcpy(mbot, mons[u.umonnum].mname);</span>
  <span id="line39">39.          while (mbot[k] != 0) {</span>
+
  <span id="line39">39.        while (mbot[k] != 0) {</span>
  <span id="line40">40.              if ((k == 0 || (k > 0 && mbot[k - 1] == ' ')) && 'a' <= mbot[k]</span>
+
  <span id="line40">40.            if ((k == 0 || (k > 0 && mbot[k - 1] == ' ')) && 'a' <= mbot[k]</span>
  <span id="line41">41.                  && mbot[k] <= 'z')</span>
+
  <span id="line41">41.                && mbot[k] <= 'z')</span>
  <span id="line42">42.                  mbot[k] += 'A' - 'a';</span>
+
  <span id="line42">42.                mbot[k] += 'A' - 'a';</span>
  <span id="line43">43.              k++;</span>
+
  <span id="line43">43.            k++;</span>
  <span id="line44">44.          }</span>
+
  <span id="line44">44.        }</span>
  <span id="line45">45.          Strcpy(nb = eos(nb), mbot);</span>
+
  <span id="line45">45.        Strcpy(nb = eos(nb), mbot);</span>
  <span id="line46">46.      } else</span>
+
  <span id="line46">46.    } else</span>
  <span id="line47">47.          Strcpy(nb = eos(nb), rank());</span>
+
  <span id="line47">47.        Strcpy(nb = eos(nb), rank());</span>
  <span id="line48">48.  </span>
+
  <span id="line48">48. </span>
  <span id="line49">49.      Sprintf(nb = eos(nb), "  ");</span>
+
  <span id="line49">49.    Sprintf(nb = eos(nb), "  ");</span>
  <span id="line50">50.      i = mrank_sz + 15;</span>
+
  <span id="line50">50.    i = mrank_sz + 15;</span>
  <span id="line51">51.      j = (int) ((nb + 2) - newbot1); /* strlen(newbot1) but less computation */</span>
+
  <span id="line51">51.    j = (int) ((nb + 2) - newbot1); /* strlen(newbot1) but less computation */</span>
  <span id="line52">52.      if ((i - j) > 0)</span>
+
  <span id="line52">52.    if ((i - j) > 0)</span>
  <span id="line53">53.          Sprintf(nb = eos(nb), "%*s", i - j, " "); /* pad with spaces */</span>
+
  <span id="line53">53.        Sprintf(nb = eos(nb), "%*s", i - j, " "); /* pad with spaces */</span>
  <span id="line54">54.      if (ACURR(A_STR) > 18) {</span>
+
  <span id="line54">54.    if (ACURR(A_STR) > 18) {</span>
  <span id="line55">55.          if (ACURR(A_STR) > STR18(100))</span>
+
  <span id="line55">55.        if (ACURR(A_STR) > STR18(100))</span>
  <span id="line56">56.              Sprintf(nb = eos(nb), "St:%2d ", ACURR(A_STR) - 100);</span>
+
  <span id="line56">56.            Sprintf(nb = eos(nb), "St:%2d ", ACURR(A_STR) - 100);</span>
  <span id="line57">57.          else if (ACURR(A_STR) < STR18(100))</span>
+
  <span id="line57">57.        else if (ACURR(A_STR) < STR18(100))</span>
  <span id="line58">58.              Sprintf(nb = eos(nb), "St:18/%02d ", ACURR(A_STR) - 18);</span>
+
  <span id="line58">58.            Sprintf(nb = eos(nb), "St:18/%02d ", ACURR(A_STR) - 18);</span>
  <span id="line59">59.          else</span>
+
  <span id="line59">59.        else</span>
  <span id="line60">60.              Sprintf(nb = eos(nb), "St:18/** ");</span>
+
  <span id="line60">60.            Sprintf(nb = eos(nb), "St:18/** ");</span>
  <span id="line61">61.      } else</span>
+
  <span id="line61">61.    } else</span>
  <span id="line62">62.          Sprintf(nb = eos(nb), "St:%-1d ", ACURR(A_STR));</span>
+
  <span id="line62">62.        Sprintf(nb = eos(nb), "St:%-1d ", ACURR(A_STR));</span>
  <span id="line63">63.      Sprintf(nb = eos(nb), "Dx:%-1d Co:%-1d In:%-1d Wi:%-1d Ch:%-1d",</span>
+
  <span id="line63">63.    Sprintf(nb = eos(nb), "Dx:%-1d Co:%-1d In:%-1d Wi:%-1d Ch:%-1d",</span>
  <span id="line64">64.              ACURR(A_DEX), ACURR(A_CON), ACURR(A_INT), ACURR(A_WIS),</span>
+
  <span id="line64">64.            ACURR(A_DEX), ACURR(A_CON), ACURR(A_INT), ACURR(A_WIS),</span>
  <span id="line65">65.              ACURR(A_CHA));</span>
+
  <span id="line65">65.            ACURR(A_CHA));</span>
  <span id="line66">66.      Sprintf(nb = eos(nb),</span>
+
  <span id="line66">66.    Sprintf(nb = eos(nb),</span>
  <span id="line67">67.              (u.ualign.type == A_CHAOTIC)</span>
+
  <span id="line67">67.            (u.ualign.type == A_CHAOTIC)</span>
  <span id="line68">68.                  ? "  Chaotic"</span>
+
  <span id="line68">68.                ? "  Chaotic"</span>
  <span id="line69">69.                  : (u.ualign.type == A_NEUTRAL) ? "  Neutral" : "  Lawful");</span>
+
  <span id="line69">69.                : (u.ualign.type == A_NEUTRAL) ? "  Neutral" : "  Lawful");</span>
  <span id="line70">70.  #ifdef SCORE_ON_BOTL</span>
+
  <span id="line70">70. #ifdef SCORE_ON_BOTL</span>
  <span id="line71">71.      if (flags.showscore)</span>
+
  <span id="line71">71.    if (flags.showscore)</span>
  <span id="line72">72.          Sprintf(nb = eos(nb), " S:%ld", botl_score());</span>
+
  <span id="line72">72.        Sprintf(nb = eos(nb), " S:%ld", botl_score());</span>
  <span id="line73">73.  #endif</span>
+
  <span id="line73">73. #endif</span>
  <span id="line74">74.      curs(WIN_STATUS, 1, 0);</span>
+
  <span id="line74">74.    curs(WIN_STATUS, 1, 0);</span>
  <span id="line75">75.      putstr(WIN_STATUS, 0, newbot1);</span>
+
  <span id="line75">75.    putstr(WIN_STATUS, 0, newbot1);</span>
  <span id="line76">76.  }</span>
+
  <span id="line76">76. }</span>
  <span id="line77">77.  </span>
+
  <span id="line77">77. </span>
  
 
=== bot2 ===
 
=== bot2 ===
 
      
 
      
  <span id="line78">78.  STATIC_OVL void</span>
+
  <span id="line78">78. STATIC_OVL void</span>
  <span id="line79">79.  bot2()</span>
+
  <span id="line79">79. bot2()</span>
  <span id="line80">80.  {</span>
+
  <span id="line80">80. {</span>
  <span id="line81">81.      char newbot2[MAXCO];</span>
+
  <span id="line81">81.    char newbot2[MAXCO];</span>
  <span id="line82">82.      register char *nb;</span>
+
  <span id="line82">82.    register char *nb;</span>
  <span id="line83">83.      int hp, hpmax;</span>
+
  <span id="line83">83.    int hp, hpmax;</span>
  <span id="line84">84.      int cap = near_capacity();</span>
+
  <span id="line84">84.    int cap = near_capacity();</span>
  <span id="line85">85.  </span>
+
  <span id="line85">85. </span>
  <span id="line86">86.      hp = Upolyd ? u.mh : u.uhp;</span>
+
  <span id="line86">86.    hp = Upolyd ? u.mh : u.uhp;</span>
  <span id="line87">87.      hpmax = Upolyd ? u.mhmax : u.uhpmax;</span>
+
  <span id="line87">87.    hpmax = Upolyd ? u.mhmax : u.uhpmax;</span>
  <span id="line88">88.  </span>
+
  <span id="line88">88. </span>
  <span id="line89">89.      if (hp < 0)</span>
+
  <span id="line89">89.    if (hp < 0)</span>
  <span id="line90">90.          hp = 0;</span>
+
  <span id="line90">90.        hp = 0;</span>
  <span id="line91">91.      (void) describe_level(newbot2);</span>
+
  <span id="line91">91.    (void) describe_level(newbot2);</span>
  <span id="line92">92.      Sprintf(nb = eos(newbot2), "%s:%-2ld HP:%d(%d) Pw:%d(%d) AC:%-2d",</span>
+
  <span id="line92">92.    Sprintf(nb = eos(newbot2), "%s:%-2ld HP:%d(%d) Pw:%d(%d) AC:%-2d",</span>
  <span id="line93">93.              encglyph(objnum_to_glyph(GOLD_PIECE)), money_cnt(invent), hp,</span>
+
  <span id="line93">93.            encglyph(objnum_to_glyph(GOLD_PIECE)), money_cnt(invent), hp,</span>
  <span id="line94">94.              hpmax, u.uen, u.uenmax, u.uac);</span>
+
  <span id="line94">94.            hpmax, u.uen, u.uenmax, u.uac);</span>
  <span id="line95">95.  </span>
+
  <span id="line95">95. </span>
  <span id="line96">96.      if (Upolyd)</span>
+
  <span id="line96">96.    if (Upolyd)</span>
  <span id="line97">97.          Sprintf(nb = eos(nb), " HD:%d", mons[u.umonnum].mlevel);</span>
+
  <span id="line97">97.        Sprintf(nb = eos(nb), " HD:%d", mons[u.umonnum].mlevel);</span>
  <span id="line98">98.      else if (flags.showexp)</span>
+
  <span id="line98">98.    else if (flags.showexp)</span>
  <span id="line99">99.          Sprintf(nb = eos(nb), " Xp:%u/%-1ld", u.ulevel, u.uexp);</span>
+
  <span id="line99">99.        Sprintf(nb = eos(nb), " Xp:%u/%-1ld", u.ulevel, u.uexp);</span>
  <span id="line100">100.      else</span>
+
  <span id="line100">100.    else</span>
  <span id="line101">101.          Sprintf(nb = eos(nb), " Exp:%u", u.ulevel);</span>
+
  <span id="line101">101.        Sprintf(nb = eos(nb), " Exp:%u", u.ulevel);</span>
  <span id="line102">102.  </span>
+
  <span id="line102">102. </span>
  <span id="line103">103.      if (flags.time)</span>
+
  <span id="line103">103.    if (flags.time)</span>
  <span id="line104">104.          Sprintf(nb = eos(nb), " T:%ld", moves);</span>
+
  <span id="line104">104.        Sprintf(nb = eos(nb), " T:%ld", moves);</span>
  <span id="line105">105.      if (strcmp(hu_stat[u.uhs], "        ")) {</span>
+
  <span id="line105">105.    if (strcmp(hu_stat[u.uhs], "        ")) {</span>
  <span id="line106">106.          Sprintf(nb = eos(nb), " ");</span>
+
  <span id="line106">106.        Sprintf(nb = eos(nb), " ");</span>
  <span id="line107">107.          Strcat(newbot2, hu_stat[u.uhs]);</span>
+
  <span id="line107">107.        Strcat(newbot2, hu_stat[u.uhs]);</span>
  <span id="line108">108.      }</span>
+
  <span id="line108">108.    }</span>
  <span id="line109">109.      if (Confusion)</span>
+
  <span id="line109">109.    if (Confusion)</span>
  <span id="line110">110.          Sprintf(nb = eos(nb), " Conf");</span>
+
  <span id="line110">110.        Sprintf(nb = eos(nb), " Conf");</span>
  <span id="line111">111.      if (Sick) {</span>
+
  <span id="line111">111.    if (Sick) {</span>
  <span id="line112">112.          if (u.usick_type & SICK_VOMITABLE)</span>
+
  <span id="line112">112.        if (u.usick_type & SICK_VOMITABLE)</span>
  <span id="line113">113.              Sprintf(nb = eos(nb), " FoodPois");</span>
+
  <span id="line113">113.            Sprintf(nb = eos(nb), " FoodPois");</span>
  <span id="line114">114.          if (u.usick_type & SICK_NONVOMITABLE)</span>
+
  <span id="line114">114.        if (u.usick_type & SICK_NONVOMITABLE)</span>
  <span id="line115">115.              Sprintf(nb = eos(nb), " Ill");</span>
+
  <span id="line115">115.            Sprintf(nb = eos(nb), " Ill");</span>
  <span id="line116">116.      }</span>
+
  <span id="line116">116.    }</span>
  <span id="line117">117.      if (Blind)</span>
+
  <span id="line117">117.    if (Blind)</span>
  <span id="line118">118.          Sprintf(nb = eos(nb), " Blind");</span>
+
  <span id="line118">118.        Sprintf(nb = eos(nb), " Blind");</span>
  <span id="line119">119.      if (Stunned)</span>
+
  <span id="line119">119.    if (Stunned)</span>
  <span id="line120">120.          Sprintf(nb = eos(nb), " Stun");</span>
+
  <span id="line120">120.        Sprintf(nb = eos(nb), " Stun");</span>
  <span id="line121">121.      if (Hallucination)</span>
+
  <span id="line121">121.    if (Hallucination)</span>
  <span id="line122">122.          Sprintf(nb = eos(nb), " Hallu");</span>
+
  <span id="line122">122.        Sprintf(nb = eos(nb), " Hallu");</span>
  <span id="line123">123.      if (Slimed)</span>
+
  <span id="line123">123.    if (Slimed)</span>
  <span id="line124">124.          Sprintf(nb = eos(nb), " Slime");</span>
+
  <span id="line124">124.        Sprintf(nb = eos(nb), " Slime");</span>
  <span id="line125">125.      if (cap > UNENCUMBERED)</span>
+
  <span id="line125">125.    if (cap > UNENCUMBERED)</span>
  <span id="line126">126.          Sprintf(nb = eos(nb), " %s", enc_stat[cap]);</span>
+
  <span id="line126">126.        Sprintf(nb = eos(nb), " %s", enc_stat[cap]);</span>
  <span id="line127">127.      curs(WIN_STATUS, 1, 1);</span>
+
  <span id="line127">127.    curs(WIN_STATUS, 1, 1);</span>
  <span id="line128">128.      putmixed(WIN_STATUS, 0, newbot2);</span>
+
  <span id="line128">128.    putmixed(WIN_STATUS, 0, newbot2);</span>
  <span id="line129">129.  }</span>
+
  <span id="line129">129. }</span>
  <span id="line130">130.  </span>
+
  <span id="line130">130. </span>
  
 
=== bot ===
 
=== bot ===
 
      
 
      
  <span id="line131">131.  void</span>
+
  <span id="line131">131. void</span>
  <span id="line132">132.  bot()</span>
+
  <span id="line132">132. bot()</span>
  <span id="line133">133.  {</span>
+
  <span id="line133">133. {</span>
  <span id="line134">134.      if (youmonst.data) {</span>
+
  <span id="line134">134.    if (youmonst.data) {</span>
  <span id="line135">135.          bot1();</span>
+
  <span id="line135">135.        bot1();</span>
  <span id="line136">136.          bot2();</span>
+
  <span id="line136">136.        bot2();</span>
  <span id="line137">137.      }</span>
+
  <span id="line137">137.    }</span>
  <span id="line138">138.      context.botl = context.botlx = 0;</span>
+
  <span id="line138">138.    context.botl = context.botlx = 0;</span>
  <span id="line139">139.  }</span>
+
  <span id="line139">139. }</span>
  <span id="line140">140.  </span>
+
  <span id="line140">140. </span>
  <span id="line141">141.  #endif /* !STATUS_VIA_WINDOWPORT */</span>
+
  <span id="line141">141. #endif /* !STATUS_VIA_WINDOWPORT */</span>
  <span id="line142">142.  </span>
+
  <span id="line142">142. </span>
  
 
== Status via all outputs ==
 
== Status via all outputs ==
Line 165: Line 165:
 
=== xlev_to_rank ===
 
=== xlev_to_rank ===
 
      
 
      
  <span id="line143">143.  /* convert experience level (1..30) to rank index (0..8) */</span>
+
  <span id="line143">143. /* convert experience level (1..30) to rank index (0..8) */</span>
  <span id="line144">144.  int</span>
+
  <span id="line144">144. int</span>
  <span id="line145">145.  xlev_to_rank(xlev)</span>
+
  <span id="line145">145. xlev_to_rank(xlev)</span>
  <span id="line146">146.  int xlev;</span>
+
  <span id="line146">146. int xlev;</span>
  <span id="line147">147.  {</span>
+
  <span id="line147">147. {</span>
  <span id="line148">148.      return (xlev <= 2) ? 0 : (xlev <= 30) ? ((xlev + 2) / 4) : 8;</span>
+
  <span id="line148">148.    return (xlev <= 2) ? 0 : (xlev <= 30) ? ((xlev + 2) / 4) : 8;</span>
  <span id="line149">149.  }</span>
+
  <span id="line149">149. }</span>
  <span id="line150">150.  </span>
+
  <span id="line150">150. </span>
  
 
=== rank_to_xlev ===
 
=== rank_to_xlev ===
 
      
 
      
  <span id="line151">151.  #if 0 /* not currently needed */</span>
+
  <span id="line151">151. #if 0 /* not currently needed */</span>
  <span id="line152">152.  /* convert rank index (0..8) to experience level (1..30) */</span>
+
  <span id="line152">152. /* convert rank index (0..8) to experience level (1..30) */</span>
  <span id="line153">153.  int</span>
+
  <span id="line153">153. int</span>
  <span id="line154">154.  rank_to_xlev(rank)</span>
+
  <span id="line154">154. rank_to_xlev(rank)</span>
  <span id="line155">155.  int rank;</span>
+
  <span id="line155">155. int rank;</span>
  <span id="line156">156.  {</span>
+
  <span id="line156">156. {</span>
  <span id="line157">157.      return (rank <= 0) ? 1 : (rank <= 8) ? ((rank * 4) - 2) : 30;</span>
+
  <span id="line157">157.    return (rank <= 0) ? 1 : (rank <= 8) ? ((rank * 4) - 2) : 30;</span>
  <span id="line158">158.  }</span>
+
  <span id="line158">158. }</span>
  <span id="line159">159.  #endif</span>
+
  <span id="line159">159. #endif</span>
  <span id="line160">160.  </span>
+
  <span id="line160">160. </span>
  
 
=== rank_of ===
 
=== rank_of ===
 
      
 
      
  <span id="line161">161.  const char *</span>
+
  <span id="line161">161. const char *</span>
  <span id="line162">162.  rank_of(lev, monnum, female)</span>
+
  <span id="line162">162. rank_of(lev, monnum, female)</span>
  <span id="line163">163.  int lev;</span>
+
  <span id="line163">163. int lev;</span>
  <span id="line164">164.  short monnum;</span>
+
  <span id="line164">164. short monnum;</span>
  <span id="line165">165.  boolean female;</span>
+
  <span id="line165">165. boolean female;</span>
  <span id="line166">166.  {</span>
+
  <span id="line166">166. {</span>
  <span id="line167">167.      register const struct Role *role;</span>
+
  <span id="line167">167.    register const struct Role *role;</span>
  <span id="line168">168.      register int i;</span>
+
  <span id="line168">168.    register int i;</span>
  <span id="line169">169.  </span>
+
  <span id="line169">169. </span>
  <span id="line170">170.      /* Find the role */</span>
+
  <span id="line170">170.    /* Find the role */</span>
  <span id="line171">171.      for (role = roles; role->name.m; role++)</span>
+
  <span id="line171">171.    for (role = roles; role->name.m; role++)</span>
  <span id="line172">172.          if (monnum == role->malenum || monnum == role->femalenum)</span>
+
  <span id="line172">172.        if (monnum == role->malenum || monnum == role->femalenum)</span>
  <span id="line173">173.              break;</span>
+
  <span id="line173">173.            break;</span>
  <span id="line174">174.      if (!role->name.m)</span>
+
  <span id="line174">174.    if (!role->name.m)</span>
  <span id="line175">175.          role = &urole;</span>
+
  <span id="line175">175.        role = &urole;</span>
  <span id="line176">176.  </span>
+
  <span id="line176">176. </span>
  <span id="line177">177.      /* Find the rank */</span>
+
  <span id="line177">177.    /* Find the rank */</span>
  <span id="line178">178.      for (i = xlev_to_rank((int) lev); i >= 0; i--) {</span>
+
  <span id="line178">178.    for (i = xlev_to_rank((int) lev); i >= 0; i--) {</span>
  <span id="line179">179.          if (female && role->rank[i].f)</span>
+
  <span id="line179">179.        if (female && role->rank[i].f)</span>
  <span id="line180">180.              return role->rank[i].f;</span>
+
  <span id="line180">180.            return role->rank[i].f;</span>
  <span id="line181">181.          if (role->rank[i].m)</span>
+
  <span id="line181">181.        if (role->rank[i].m)</span>
  <span id="line182">182.              return role->rank[i].m;</span>
+
  <span id="line182">182.            return role->rank[i].m;</span>
  <span id="line183">183.      }</span>
+
  <span id="line183">183.    }</span>
  <span id="line184">184.  </span>
+
  <span id="line184">184. </span>
  <span id="line185">185.      /* Try the role name, instead */</span>
+
  <span id="line185">185.    /* Try the role name, instead */</span>
  <span id="line186">186.      if (female && role->name.f)</span>
+
  <span id="line186">186.    if (female && role->name.f)</span>
  <span id="line187">187.          return role->name.f;</span>
+
  <span id="line187">187.        return role->name.f;</span>
  <span id="line188">188.      else if (role->name.m)</span>
+
  <span id="line188">188.    else if (role->name.m)</span>
  <span id="line189">189.          return role->name.m;</span>
+
  <span id="line189">189.        return role->name.m;</span>
  <span id="line190">190.      return "Player";</span>
+
  <span id="line190">190.    return "Player";</span>
  <span id="line191">191.  }</span>
+
  <span id="line191">191. }</span>
  <span id="line192">192.  </span>
+
  <span id="line192">192. </span>
  
 
=== rank ===
 
=== rank ===
 
      
 
      
  <span id="line193">193.  STATIC_OVL const char *</span>
+
  <span id="line193">193. STATIC_OVL const char *</span>
  <span id="line194">194.  rank()</span>
+
  <span id="line194">194. rank()</span>
  <span id="line195">195.  {</span>
+
  <span id="line195">195. {</span>
  <span id="line196">196.      return rank_of(u.ulevel, Role_switch, flags.female);</span>
+
  <span id="line196">196.    return rank_of(u.ulevel, Role_switch, flags.female);</span>
  <span id="line197">197.  }</span>
+
  <span id="line197">197. }</span>
  <span id="line198">198.  </span>
+
  <span id="line198">198. </span>
  
 
=== title_to_mon ===
 
=== title_to_mon ===
 
      
 
      
  <span id="line199">199.  int</span>
+
  <span id="line199">199. int</span>
  <span id="line200">200.  title_to_mon(str, rank_indx, title_length)</span>
+
  <span id="line200">200. title_to_mon(str, rank_indx, title_length)</span>
  <span id="line201">201.  const char *str;</span>
+
  <span id="line201">201. const char *str;</span>
  <span id="line202">202.  int *rank_indx, *title_length;</span>
+
  <span id="line202">202. int *rank_indx, *title_length;</span>
  <span id="line203">203.  {</span>
+
  <span id="line203">203. {</span>
  <span id="line204">204.      register int i, j;</span>
+
  <span id="line204">204.    register int i, j;</span>
  <span id="line205">205.  </span>
+
  <span id="line205">205. </span>
  <span id="line206">206.      /* Loop through each of the roles */</span>
+
  <span id="line206">206.    /* Loop through each of the roles */</span>
  <span id="line207">207.      for (i = 0; roles[i].name.m; i++)</span>
+
  <span id="line207">207.    for (i = 0; roles[i].name.m; i++)</span>
  <span id="line208">208.          for (j = 0; j < 9; j++) {</span>
+
  <span id="line208">208.        for (j = 0; j < 9; j++) {</span>
  <span id="line209">209.              if (roles[i].rank[j].m</span>
+
  <span id="line209">209.            if (roles[i].rank[j].m</span>
  <span id="line210">210.                  && !strncmpi(str, roles[i].rank[j].m,</span>
+
  <span id="line210">210.                && !strncmpi(str, roles[i].rank[j].m,</span>
  <span id="line211">211.                              strlen(roles[i].rank[j].m))) {</span>
+
  <span id="line211">211.                              strlen(roles[i].rank[j].m))) {</span>
  <span id="line212">212.                  if (rank_indx)</span>
+
  <span id="line212">212.                if (rank_indx)</span>
  <span id="line213">213.                      *rank_indx = j;</span>
+
  <span id="line213">213.                    *rank_indx = j;</span>
  <span id="line214">214.                  if (title_length)</span>
+
  <span id="line214">214.                if (title_length)</span>
  <span id="line215">215.                      *title_length = strlen(roles[i].rank[j].m);</span>
+
  <span id="line215">215.                    *title_length = strlen(roles[i].rank[j].m);</span>
  <span id="line216">216.                  return roles[i].malenum;</span>
+
  <span id="line216">216.                return roles[i].malenum;</span>
  <span id="line217">217.              }</span>
+
  <span id="line217">217.            }</span>
  <span id="line218">218.              if (roles[i].rank[j].f</span>
+
  <span id="line218">218.            if (roles[i].rank[j].f</span>
  <span id="line219">219.                  && !strncmpi(str, roles[i].rank[j].f,</span>
+
  <span id="line219">219.                && !strncmpi(str, roles[i].rank[j].f,</span>
  <span id="line220">220.                              strlen(roles[i].rank[j].f))) {</span>
+
  <span id="line220">220.                              strlen(roles[i].rank[j].f))) {</span>
  <span id="line221">221.                  if (rank_indx)</span>
+
  <span id="line221">221.                if (rank_indx)</span>
  <span id="line222">222.                      *rank_indx = j;</span>
+
  <span id="line222">222.                    *rank_indx = j;</span>
  <span id="line223">223.                  if (title_length)</span>
+
  <span id="line223">223.                if (title_length)</span>
  <span id="line224">224.                      *title_length = strlen(roles[i].rank[j].f);</span>
+
  <span id="line224">224.                    *title_length = strlen(roles[i].rank[j].f);</span>
  <span id="line225">225.                  return (roles[i].femalenum != NON_PM) ? roles[i].femalenum</span>
+
  <span id="line225">225.                return (roles[i].femalenum != NON_PM) ? roles[i].femalenum</span>
  <span id="line226">226.                                                        : roles[i].malenum;</span>
+
  <span id="line226">226.                                                      : roles[i].malenum;</span>
  <span id="line227">227.              }</span>
+
  <span id="line227">227.            }</span>
  <span id="line228">228.          }</span>
+
  <span id="line228">228.        }</span>
  <span id="line229">229.      return NON_PM;</span>
+
  <span id="line229">229.    return NON_PM;</span>
  <span id="line230">230.  }</span>
+
  <span id="line230">230. }</span>
  <span id="line231">231.  </span>
+
  <span id="line231">231. </span>
  
 
=== max_rank_sz ===
 
=== max_rank_sz ===
 
      
 
      
  <span id="line232">232.  void</span>
+
  <span id="line232">232. void</span>
  <span id="line233">233.  max_rank_sz()</span>
+
  <span id="line233">233. max_rank_sz()</span>
  <span id="line234">234.  {</span>
+
  <span id="line234">234. {</span>
  <span id="line235">235.      register int i, r, maxr = 0;</span>
+
  <span id="line235">235.    register int i, r, maxr = 0;</span>
  <span id="line236">236.      for (i = 0; i < 9; i++) {</span>
+
  <span id="line236">236.    for (i = 0; i < 9; i++) {</span>
  <span id="line237">237.          if (urole.rank[i].m && (r = strlen(urole.rank[i].m)) > maxr)</span>
+
  <span id="line237">237.        if (urole.rank[i].m && (r = strlen(urole.rank[i].m)) > maxr)</span>
  <span id="line238">238.              maxr = r;</span>
+
  <span id="line238">238.            maxr = r;</span>
  <span id="line239">239.          if (urole.rank[i].f && (r = strlen(urole.rank[i].f)) > maxr)</span>
+
  <span id="line239">239.        if (urole.rank[i].f && (r = strlen(urole.rank[i].f)) > maxr)</span>
  <span id="line240">240.              maxr = r;</span>
+
  <span id="line240">240.            maxr = r;</span>
  <span id="line241">241.      }</span>
+
  <span id="line241">241.    }</span>
  <span id="line242">242.      mrank_sz = maxr;</span>
+
  <span id="line242">242.    mrank_sz = maxr;</span>
  <span id="line243">243.      return;</span>
+
  <span id="line243">243.    return;</span>
  <span id="line244">244.  }</span>
+
  <span id="line244">244. }</span>
  <span id="line245">245.  </span>
+
  <span id="line245">245. </span>
  
 
=== botl_score ===
 
=== botl_score ===
 
      
 
      
  <span id="line246">246.  #ifdef SCORE_ON_BOTL</span>
+
  <span id="line246">246. #ifdef SCORE_ON_BOTL</span>
  <span id="line247">247.  long</span>
+
  <span id="line247">247. long</span>
  <span id="line248">248.  botl_score()</span>
+
  <span id="line248">248. botl_score()</span>
  <span id="line249">249.  {</span>
+
  <span id="line249">249. {</span>
  <span id="line250">250.      long deepest = deepest_lev_reached(FALSE);</span>
+
  <span id="line250">250.    long deepest = deepest_lev_reached(FALSE);</span>
  <span id="line251">251.      long utotal;</span>
+
  <span id="line251">251.    long utotal;</span>
  <span id="line252">252.  </span>
+
  <span id="line252">252. </span>
  <span id="line253">253.      utotal = money_cnt(invent) + hidden_gold();</span>
+
  <span id="line253">253.    utotal = money_cnt(invent) + hidden_gold();</span>
  <span id="line254">254.      if ((utotal -= u.umoney0) < 0L)</span>
+
  <span id="line254">254.    if ((utotal -= u.umoney0) < 0L)</span>
  <span id="line255">255.          utotal = 0L;</span>
+
  <span id="line255">255.        utotal = 0L;</span>
  <span id="line256">256.      utotal += u.urexp + (50 * (deepest - 1))</span>
+
  <span id="line256">256.    utotal += u.urexp + (50 * (deepest - 1))</span>
  <span id="line257">257.            + (deepest > 30 ? 10000 : deepest > 20 ? 1000 * (deepest - 20) : 0);</span>
+
  <span id="line257">257.          + (deepest > 30 ? 10000 : deepest > 20 ? 1000 * (deepest - 20) : 0);</span>
  <span id="line258">258.      if (utotal < u.urexp)</span>
+
  <span id="line258">258.    if (utotal < u.urexp)</span>
  <span id="line259">259.          utotal = LONG_MAX; /* wrap around */</span>
+
  <span id="line259">259.        utotal = LONG_MAX; /* wrap around */</span>
  <span id="line260">260.      return utotal;</span>
+
  <span id="line260">260.    return utotal;</span>
  <span id="line261">261.  }</span>
+
  <span id="line261">261. }</span>
  <span id="line262">262.  #endif /* SCORE_ON_BOTL */</span>
+
  <span id="line262">262. #endif /* SCORE_ON_BOTL */</span>
  <span id="line263">263.  </span>
+
  <span id="line263">263. </span>
  
 
=== describe_level ===
 
=== describe_level ===
 
      
 
      
  <span id="line264">264.  /* provide the name of the current level for display by various ports */</span>
+
  <span id="line264">264. /* provide the name of the current level for display by various ports */</span>
  <span id="line265">265.  int</span>
+
  <span id="line265">265. int</span>
  <span id="line266">266.  describe_level(buf)</span>
+
  <span id="line266">266. describe_level(buf)</span>
  <span id="line267">267.  char *buf;</span>
+
  <span id="line267">267. char *buf;</span>
  <span id="line268">268.  {</span>
+
  <span id="line268">268. {</span>
  <span id="line269">269.      int ret = 1;</span>
+
  <span id="line269">269.    int ret = 1;</span>
  <span id="line270">270.  </span>
+
  <span id="line270">270. </span>
  <span id="line271">271.      /* TODO:    Add in dungeon name */</span>
+
  <span id="line271">271.    /* TODO:    Add in dungeon name */</span>
  <span id="line272">272.      if (Is_knox(&u.uz))</span>
+
  <span id="line272">272.    if (Is_knox(&u.uz))</span>
  <span id="line273">273.          Sprintf(buf, "%s ", dungeons[u.uz.dnum].dname);</span>
+
  <span id="line273">273.        Sprintf(buf, "%s ", dungeons[u.uz.dnum].dname);</span>
  <span id="line274">274.      else if (In_quest(&u.uz))</span>
+
  <span id="line274">274.    else if (In_quest(&u.uz))</span>
  <span id="line275">275.          Sprintf(buf, "Home %d ", dunlev(&u.uz));</span>
+
  <span id="line275">275.        Sprintf(buf, "Home %d ", dunlev(&u.uz));</span>
  <span id="line276">276.      else if (In_endgame(&u.uz))</span>
+
  <span id="line276">276.    else if (In_endgame(&u.uz))</span>
  <span id="line277">277.          Sprintf(buf, Is_astralevel(&u.uz) ? "Astral Plane " : "End Game ");</span>
+
  <span id="line277">277.        Sprintf(buf, Is_astralevel(&u.uz) ? "Astral Plane " : "End Game ");</span>
  <span id="line278">278.      else {</span>
+
  <span id="line278">278.    else {</span>
  <span id="line279">279.          /* ports with more room may expand this one */</span>
+
  <span id="line279">279.        /* ports with more room may expand this one */</span>
  <span id="line280">280.          Sprintf(buf, "Dlvl:%-2d ", depth(&u.uz));</span>
+
  <span id="line280">280.        Sprintf(buf, "Dlvl:%-2d ", depth(&u.uz));</span>
  <span id="line281">281.          ret = 0;</span>
+
  <span id="line281">281.        ret = 0;</span>
  <span id="line282">282.      }</span>
+
  <span id="line282">282.    }</span>
  <span id="line283">283.      return ret;</span>
+
  <span id="line283">283.    return ret;</span>
  <span id="line284">284.  }</span>
+
  <span id="line284">284. }</span>
  <span id="line285">285.  </span>
+
  <span id="line285">285. </span>
  
 
== Status via windowport ==
 
== Status via windowport ==
 
      
 
      
  <span id="line286">286.  #ifdef STATUS_VIA_WINDOWPORT</span>
+
  <span id="line286">286. #ifdef STATUS_VIA_WINDOWPORT</span>
  <span id="line287">287.  /* =======================================================================*/</span>
+
  <span id="line287">287. /* =======================================================================*/</span>
  <span id="line288">288.  </span>
+
  <span id="line288">288. </span>
  <span id="line289">289.  /* structure that tracks the status details in the core */</span>
+
  <span id="line289">289. /* structure that tracks the status details in the core */</span>
  <span id="line290">290.  struct istat_s {</span>
+
  <span id="line290">290. struct istat_s {</span>
  <span id="line291">291.      long time;</span>
+
  <span id="line291">291.    long time;</span>
  <span id="line292">292.      unsigned anytype;</span>
+
  <span id="line292">292.    unsigned anytype;</span>
  <span id="line293">293.      anything a;</span>
+
  <span id="line293">293.    anything a;</span>
  <span id="line294">294.      char *val;</span>
+
  <span id="line294">294.    char *val;</span>
  <span id="line295">295.      int valwidth;</span>
+
  <span id="line295">295.    int valwidth;</span>
  <span id="line296">296.      enum statusfields idxmax;</span>
+
  <span id="line296">296.    enum statusfields idxmax;</span>
  <span id="line297">297.      enum statusfields fld;</span>
+
  <span id="line297">297.    enum statusfields fld;</span>
  <span id="line298">298.  };</span>
+
  <span id="line298">298. };</span>
  <span id="line299">299.  </span>
+
  <span id="line299">299. </span>
  <span id="line300">300.  </span>
+
  <span id="line300">300. </span>
  <span id="line301">301.  STATIC_DCL void NDECL(init_blstats);</span>
+
  <span id="line301">301. STATIC_DCL void NDECL(init_blstats);</span>
  <span id="line302">302.  STATIC_DCL char *FDECL(anything_to_s, (char *, anything *, int));</span>
+
  <span id="line302">302. STATIC_DCL char *FDECL(anything_to_s, (char *, anything *, int));</span>
  <span id="line303">303.  STATIC_DCL void FDECL(s_to_anything, (anything *, char *, int));</span>
+
  <span id="line303">303. STATIC_DCL void FDECL(s_to_anything, (anything *, char *, int));</span>
  <span id="line304">304.  STATIC_OVL int FDECL(percentage, (struct istat_s *, struct istat_s *));</span>
+
  <span id="line304">304. STATIC_OVL int FDECL(percentage, (struct istat_s *, struct istat_s *));</span>
  <span id="line305">305.  STATIC_OVL int FDECL(compare_blstats, (struct istat_s *, struct istat_s *));</span>
+
  <span id="line305">305. STATIC_OVL int FDECL(compare_blstats, (struct istat_s *, struct istat_s *));</span>
  <span id="line306">306.  </span>
+
  <span id="line306">306. </span>
  <span id="line307">307.  #ifdef STATUS_HILITES</span>
+
  <span id="line307">307. #ifdef STATUS_HILITES</span>
  <span id="line308">308.  STATIC_DCL boolean FDECL(assign_hilite, (char *, char *, char *, char *,</span>
+
  <span id="line308">308. STATIC_DCL boolean FDECL(assign_hilite, (char *, char *, char *, char *,</span>
  <span id="line309">309.                                          BOOLEAN_P));</span>
+
  <span id="line309">309.                                          BOOLEAN_P));</span>
  <span id="line310">310.  STATIC_DCL const char *FDECL(clridx_to_s, (char *, int));</span>
+
  <span id="line310">310. STATIC_DCL const char *FDECL(clridx_to_s, (char *, int));</span>
  <span id="line311">311.  #endif</span>
+
  <span id="line311">311. #endif</span>
  <span id="line312">312.  </span>
+
  <span id="line312">312. </span>
  <span id="line313">313.  /* If entries are added to this, botl.h will require updating too */</span>
+
  <span id="line313">313. /* If entries are added to this, botl.h will require updating too */</span>
  <span id="line314">314.  STATIC_DCL struct istat_s initblstats[MAXBLSTATS] = {</span>
+
  <span id="line314">314. STATIC_DCL struct istat_s initblstats[MAXBLSTATS] = {</span>
  <span id="line315">315.      { 0L, ANY_STR,  { (genericptr_t) 0 }, (char *) 0, 80,  0, BL_TITLE},</span>
+
  <span id="line315">315.    { 0L, ANY_STR,  { (genericptr_t) 0 }, (char *) 0, 80,  0, BL_TITLE},</span>
  <span id="line316">316.      { 0L, ANY_INT,  { (genericptr_t) 0 }, (char *) 0, 10,  0, BL_STR},</span>
+
  <span id="line316">316.    { 0L, ANY_INT,  { (genericptr_t) 0 }, (char *) 0, 10,  0, BL_STR},</span>
  <span id="line317">317.      { 0L, ANY_INT,  { (genericptr_t) 0 }, (char *) 0, 10,  0, BL_DX},</span>
+
  <span id="line317">317.    { 0L, ANY_INT,  { (genericptr_t) 0 }, (char *) 0, 10,  0, BL_DX},</span>
  <span id="line318">318.      { 0L, ANY_INT,  { (genericptr_t) 0 }, (char *) 0, 10,  0, BL_CO},</span>
+
  <span id="line318">318.    { 0L, ANY_INT,  { (genericptr_t) 0 }, (char *) 0, 10,  0, BL_CO},</span>
  <span id="line319">319.      { 0L, ANY_INT,  { (genericptr_t) 0 }, (char *) 0, 10,  0, BL_IN},</span>
+
  <span id="line319">319.    { 0L, ANY_INT,  { (genericptr_t) 0 }, (char *) 0, 10,  0, BL_IN},</span>
  <span id="line320">320.      { 0L, ANY_INT,  { (genericptr_t) 0 }, (char *) 0, 10,  0, BL_WI},</span>
+
  <span id="line320">320.    { 0L, ANY_INT,  { (genericptr_t) 0 }, (char *) 0, 10,  0, BL_WI},</span>
  <span id="line321">321.      { 0L, ANY_INT,  { (genericptr_t) 0 }, (char *) 0, 10,  0, BL_CH},</span>
+
  <span id="line321">321.    { 0L, ANY_INT,  { (genericptr_t) 0 }, (char *) 0, 10,  0, BL_CH},</span>
  <span id="line322">322.      { 0L, ANY_STR,  { (genericptr_t) 0 }, (char *) 0, 40,  0, BL_ALIGN},</span>
+
  <span id="line322">322.    { 0L, ANY_STR,  { (genericptr_t) 0 }, (char *) 0, 40,  0, BL_ALIGN},</span>
  <span id="line323">323.      { 0L, ANY_LONG, { (genericptr_t) 0 }, (char *) 0, 20,  0, BL_SCORE},</span>
+
  <span id="line323">323.    { 0L, ANY_LONG, { (genericptr_t) 0 }, (char *) 0, 20,  0, BL_SCORE},</span>
  <span id="line324">324.      { 0L, ANY_LONG, { (genericptr_t) 0 }, (char *) 0, 20,  0, BL_CAP},</span>
+
  <span id="line324">324.    { 0L, ANY_LONG, { (genericptr_t) 0 }, (char *) 0, 20,  0, BL_CAP},</span>
  <span id="line325">325.      { 0L, ANY_LONG, { (genericptr_t) 0 }, (char *) 0, 30,  0, BL_GOLD},</span>
+
  <span id="line325">325.    { 0L, ANY_LONG, { (genericptr_t) 0 }, (char *) 0, 30,  0, BL_GOLD},</span>
  <span id="line326">326.      { 0L, ANY_INT,  { (genericptr_t) 0 }, (char *) 0, 10,  BL_ENEMAX, BL_ENE},</span>
+
  <span id="line326">326.    { 0L, ANY_INT,  { (genericptr_t) 0 }, (char *) 0, 10,  BL_ENEMAX, BL_ENE},</span>
  <span id="line327">327.      { 0L, ANY_INT,  { (genericptr_t) 0 }, (char *) 0, 10,  0, BL_ENEMAX},</span>
+
  <span id="line327">327.    { 0L, ANY_INT,  { (genericptr_t) 0 }, (char *) 0, 10,  0, BL_ENEMAX},</span>
  <span id="line328">328.      { 0L, ANY_LONG, { (genericptr_t) 0 }, (char *) 0, 10,  0, BL_XP},</span>
+
  <span id="line328">328.    { 0L, ANY_LONG, { (genericptr_t) 0 }, (char *) 0, 10,  0, BL_XP},</span>
  <span id="line329">329.      { 0L, ANY_INT,  { (genericptr_t) 0 }, (char *) 0, 10,  0, BL_AC},</span>
+
  <span id="line329">329.    { 0L, ANY_INT,  { (genericptr_t) 0 }, (char *) 0, 10,  0, BL_AC},</span>
  <span id="line330">330.      { 0L, ANY_INT,  { (genericptr_t) 0 }, (char *) 0, 10,  0, BL_HD},</span>
+
  <span id="line330">330.    { 0L, ANY_INT,  { (genericptr_t) 0 }, (char *) 0, 10,  0, BL_HD},</span>
  <span id="line331">331.      { 0L, ANY_INT,  { (genericptr_t) 0 }, (char *) 0, 20,  0, BL_TIME},</span>
+
  <span id="line331">331.    { 0L, ANY_INT,  { (genericptr_t) 0 }, (char *) 0, 20,  0, BL_TIME},</span>
  <span id="line332">332.      { 0L, ANY_UINT, { (genericptr_t) 0 }, (char *) 0, 40,  0, BL_HUNGER},</span>
+
  <span id="line332">332.    { 0L, ANY_UINT, { (genericptr_t) 0 }, (char *) 0, 40,  0, BL_HUNGER},</span>
  <span id="line333">333.      { 0L, ANY_INT,  { (genericptr_t) 0 }, (char *) 0, 10,  BL_HPMAX, BL_HP},</span>
+
  <span id="line333">333.    { 0L, ANY_INT,  { (genericptr_t) 0 }, (char *) 0, 10,  BL_HPMAX, BL_HP},</span>
  <span id="line334">334.      { 0L, ANY_INT,  { (genericptr_t) 0 }, (char *) 0, 10,  0, BL_HPMAX},</span>
+
  <span id="line334">334.    { 0L, ANY_INT,  { (genericptr_t) 0 }, (char *) 0, 10,  0, BL_HPMAX},</span>
  <span id="line335">335.      { 0L, ANY_STR,  { (genericptr_t) 0 }, (char *) 0, 80,  0, BL_LEVELDESC},</span>
+
  <span id="line335">335.    { 0L, ANY_STR,  { (genericptr_t) 0 }, (char *) 0, 80,  0, BL_LEVELDESC},</span>
  <span id="line336">336.      { 0L, ANY_LONG, { (genericptr_t) 0 }, (char *) 0, 20,  0, BL_EXP},</span>
+
  <span id="line336">336.    { 0L, ANY_LONG, { (genericptr_t) 0 }, (char *) 0, 20,  0, BL_EXP},</span>
  <span id="line337">337.      { 0L, ANY_MASK32,</span>
+
  <span id="line337">337.    { 0L, ANY_MASK32,</span>
  <span id="line338">338.                      { (genericptr_t) 0 }, (char *) 0,  0,  0, BL_CONDITION}</span>
+
  <span id="line338">338.                    { (genericptr_t) 0 }, (char *) 0,  0,  0, BL_CONDITION}</span>
  <span id="line339">339.  };</span>
+
  <span id="line339">339. };</span>
  <span id="line340">340.  </span>
+
  <span id="line340">340. </span>
  <span id="line341">341.  static struct fieldid_t {</span>
+
  <span id="line341">341. static struct fieldid_t {</span>
  <span id="line342">342.          const char *fieldname;</span>
+
  <span id="line342">342.        const char *fieldname;</span>
  <span id="line343">343.          enum statusfields fldid;</span>
+
  <span id="line343">343.        enum statusfields fldid;</span>
  <span id="line344">344.  } fieldids[] = {</span>
+
  <span id="line344">344. } fieldids[] = {</span>
  <span id="line345">345.          {"title",              BL_TITLE},</span>
+
  <span id="line345">345.        {"title",              BL_TITLE},</span>
  <span id="line346">346.          {"strength",            BL_STR},</span>
+
  <span id="line346">346.        {"strength",            BL_STR},</span>
  <span id="line347">347.          {"dexterity",          BL_DX},</span>
+
  <span id="line347">347.        {"dexterity",          BL_DX},</span>
  <span id="line348">348.          {"constitution",        BL_CO},</span>
+
  <span id="line348">348.        {"constitution",        BL_CO},</span>
  <span id="line349">349.          {"intelligence",        BL_IN},</span>
+
  <span id="line349">349.        {"intelligence",        BL_IN},</span>
  <span id="line350">350.          {"wisdom",              BL_WI},</span>
+
  <span id="line350">350.        {"wisdom",              BL_WI},</span>
  <span id="line351">351.          {"charisma",            BL_CH},</span>
+
  <span id="line351">351.        {"charisma",            BL_CH},</span>
  <span id="line352">352.          {"alignment",          BL_ALIGN},</span>
+
  <span id="line352">352.        {"alignment",          BL_ALIGN},</span>
  <span id="line353">353.          {"score",              BL_SCORE},</span>
+
  <span id="line353">353.        {"score",              BL_SCORE},</span>
  <span id="line354">354.          {"carrying-capacity",  BL_CAP},</span>
+
  <span id="line354">354.        {"carrying-capacity",  BL_CAP},</span>
  <span id="line355">355.          {"gold",                BL_GOLD},</span>
+
  <span id="line355">355.        {"gold",                BL_GOLD},</span>
  <span id="line356">356.          {"power",              BL_ENE},</span>
+
  <span id="line356">356.        {"power",              BL_ENE},</span>
  <span id="line357">357.          {"power-max",          BL_ENEMAX},</span>
+
  <span id="line357">357.        {"power-max",          BL_ENEMAX},</span>
  <span id="line358">358.          {"experience-level",    BL_XP},</span>
+
  <span id="line358">358.        {"experience-level",    BL_XP},</span>
  <span id="line359">359.          {"armor-class",        BL_AC},</span>
+
  <span id="line359">359.        {"armor-class",        BL_AC},</span>
  <span id="line360">360.          {"HD",                  BL_HD},</span>
+
  <span id="line360">360.        {"HD",                  BL_HD},</span>
  <span id="line361">361.          {"time",                BL_TIME},</span>
+
  <span id="line361">361.        {"time",                BL_TIME},</span>
  <span id="line362">362.          {"hunger",              BL_HUNGER},</span>
+
  <span id="line362">362.        {"hunger",              BL_HUNGER},</span>
  <span id="line363">363.          {"hitpoints",          BL_HP},</span>
+
  <span id="line363">363.        {"hitpoints",          BL_HP},</span>
  <span id="line364">364.          {"hitpoints-max",      BL_HPMAX},</span>
+
  <span id="line364">364.        {"hitpoints-max",      BL_HPMAX},</span>
  <span id="line365">365.          {"dungeon-level",      BL_LEVELDESC},</span>
+
  <span id="line365">365.        {"dungeon-level",      BL_LEVELDESC},</span>
  <span id="line366">366.          {"experience",          BL_EXP},</span>
+
  <span id="line366">366.        {"experience",          BL_EXP},</span>
  <span id="line367">367.          {"condition",          BL_CONDITION},</span>
+
  <span id="line367">367.        {"condition",          BL_CONDITION},</span>
  <span id="line368">368.  };</span>
+
  <span id="line368">368. };</span>
  <span id="line369">369.  </span>
+
  <span id="line369">369. </span>
  <span id="line370">370.  struct istat_s blstats[2][MAXBLSTATS];</span>
+
  <span id="line370">370. struct istat_s blstats[2][MAXBLSTATS];</span>
  <span id="line371">371.  static boolean blinit = FALSE, update_all = FALSE;</span>
+
  <span id="line371">371. static boolean blinit = FALSE, update_all = FALSE;</span>
  <span id="line372">372.  </span>
+
  <span id="line372">372. </span>
  
 
=== bot ===
 
=== bot ===
 
 
<span id="line373">373.  void</span>
+
<span id="line373">373. void</span>
<span id="line374">374.  bot()</span>
+
<span id="line374">374. bot()</span>
<span id="line375">375.  {</span>
+
<span id="line375">375. {</span>
<span id="line376">376.     char buf[BUFSZ];</span>
+
<span id="line376">376.     char buf[BUFSZ];</span>
<span id="line377">377.     register char *nb;</span>
+
<span id="line377">377.     register char *nb;</span>
<span id="line378">378.     static int idx = 0, idx_p, idxmax;</span>
+
<span id="line378">378.     static int idx = 0, idx_p, idxmax;</span>
<span id="line379">379.     boolean updated = FALSE;</span>
+
<span id="line379">379.     boolean updated = FALSE;</span>
<span id="line380">380.     unsigned anytype;</span>
+
<span id="line380">380.     unsigned anytype;</span>
<span id="line381">381.     int i, pc, chg, cap;</span>
+
<span id="line381">381.     int i, pc, chg, cap;</span>
<span id="line382">382.     struct istat_s *curr, *prev;</span>
+
<span id="line382">382.     struct istat_s *curr, *prev;</span>
<span id="line383">383.     boolean valset[MAXBLSTATS], chgval = FALSE;</span
+
<span id="line383">383.     boolean valset[MAXBLSTATS], chgval = FALSE;</span>
 +
 
  
 
=== status_initialize ===
 
=== status_initialize ===
 
 
  <span id="line627">627.  void</span>
+
  <span id="line627">627. void</span>
  <span id="line628">628.  status_initialize(reassessment)</span>
+
  <span id="line628">628. status_initialize(reassessment)</span>
  <span id="line629">629.  boolean</span>
+
  <span id="line629">629. boolean</span>
  <span id="line630">630.      reassessment; /* TRUE = just reassess fields w/o other initialization*/</span>
+
  <span id="line630">630.    reassessment; /* TRUE = just reassess fields w/o other initialization*/</span>
  <span id="line631">631.  {</span>
+
  <span id="line631">631. {</span>
  <span id="line632">632.      int i;</span>
+
  <span id="line632">632.    int i;</span>
  <span id="line633">633.      const char *fieldfmt = (const char *)0;</span>
+
  <span id="line633">633.    const char *fieldfmt = (const char *)0;</span>
  <span id="line634">634.      const char *fieldname = (const char *)0;</span>
+
  <span id="line634">634.    const char *fieldname = (const char *)0;</span>
  <span id="line635">635.  </span>
+
  <span id="line635">635. </span>
  <span id="line636">636.      if (!reassessment) {</span>
+
  <span id="line636">636.    if (!reassessment) {</span>
  <span id="line637">637.          init_blstats();</span>
+
  <span id="line637">637.        init_blstats();</span>
  <span id="line638">638.          (*windowprocs.win_status_init)();</span>
+
  <span id="line638">638.        (*windowprocs.win_status_init)();</span>
  <span id="line639">639.          blinit = TRUE;</span>
+
  <span id="line639">639.        blinit = TRUE;</span>
  <span id="line640">640.  #ifdef STATUS_HILITES</span>
+
  <span id="line640">640. #ifdef STATUS_HILITES</span>
  <span id="line641">641.          status_notify_windowport(TRUE);</span>
+
  <span id="line641">641.        status_notify_windowport(TRUE);</span>
  <span id="line642">642.  #endif</span>
+
  <span id="line642">642. #endif</span>
  <span id="line643">643.      }</span>
+
  <span id="line643">643.    }</span>
  <span id="line644">644.      for (i = 0; i < MAXBLSTATS; ++i) {</span>
+
  <span id="line644">644.    for (i = 0; i < MAXBLSTATS; ++i) {</span>
  <span id="line645">645.          enum statusfields fld = initblstats[i].fld;</span>
+
  <span id="line645">645.        enum statusfields fld = initblstats[i].fld;</span>
  <span id="line646">646.  </span>
+
  <span id="line646">646. </span>
  <span id="line647">647.          switch (fld) {</span>
+
  <span id="line647">647.        switch (fld) {</span>
  <span id="line648">648.          case BL_TITLE:</span>
+
  <span id="line648">648.        case BL_TITLE:</span>
  <span id="line649">649.              fieldfmt = "%s";</span>
+
  <span id="line649">649.            fieldfmt = "%s";</span>
  <span id="line650">650.              fieldname = "title";</span>
+
  <span id="line650">650.            fieldname = "title";</span>
  <span id="line651">651.              status_enablefield(fld, fieldname, fieldfmt, TRUE);</span>
+
  <span id="line651">651.            status_enablefield(fld, fieldname, fieldfmt, TRUE);</span>
  <span id="line652">652.              break;</span>
+
  <span id="line652">652.            break;</span>
  <span id="line653">653.          case BL_STR:</span>
+
  <span id="line653">653.        case BL_STR:</span>
  <span id="line654">654.              fieldfmt = " St:%s";</span>
+
  <span id="line654">654.            fieldfmt = " St:%s";</span>
  <span id="line655">655.              fieldname = "strength";</span>
+
  <span id="line655">655.            fieldname = "strength";</span>
  <span id="line656">656.              status_enablefield(fld, fieldname, fieldfmt, TRUE);</span>
+
  <span id="line656">656.            status_enablefield(fld, fieldname, fieldfmt, TRUE);</span>
  <span id="line657">657.              break;</span>
+
  <span id="line657">657.            break;</span>
  <span id="line658">658.          case BL_DX:</span>
+
  <span id="line658">658.        case BL_DX:</span>
  <span id="line659">659.              fieldfmt = " Dx:%s";</span>
+
  <span id="line659">659.            fieldfmt = " Dx:%s";</span>
  <span id="line660">660.              fieldname = "dexterity";</span>
+
  <span id="line660">660.            fieldname = "dexterity";</span>
  <span id="line661">661.              status_enablefield(fld, fieldname, fieldfmt, TRUE);</span>
+
  <span id="line661">661.            status_enablefield(fld, fieldname, fieldfmt, TRUE);</span>
  <span id="line662">662.              break;</span>
+
  <span id="line662">662.            break;</span>
  <span id="line663">663.          case BL_CO:</span>
+
  <span id="line663">663.        case BL_CO:</span>
  <span id="line664">664.              fieldfmt = " Co:%s";</span>
+
  <span id="line664">664.            fieldfmt = " Co:%s";</span>
  <span id="line665">665.              fieldname = "constitution";</span>
+
  <span id="line665">665.            fieldname = "constitution";</span>
  <span id="line666">666.              status_enablefield(fld, fieldname, fieldfmt, TRUE);</span>
+
  <span id="line666">666.            status_enablefield(fld, fieldname, fieldfmt, TRUE);</span>
  <span id="line667">667.              break;</span>
+
  <span id="line667">667.            break;</span>
  <span id="line668">668.          case BL_IN:</span>
+
  <span id="line668">668.        case BL_IN:</span>
  <span id="line669">669.              fieldfmt = " In:%s";</span>
+
  <span id="line669">669.            fieldfmt = " In:%s";</span>
  <span id="line670">670.              fieldname = "intelligence";</span>
+
  <span id="line670">670.            fieldname = "intelligence";</span>
  <span id="line671">671.              status_enablefield(fld, fieldname, fieldfmt, TRUE);</span>
+
  <span id="line671">671.            status_enablefield(fld, fieldname, fieldfmt, TRUE);</span>
  <span id="line672">672.              break;</span>
+
  <span id="line672">672.            break;</span>
  <span id="line673">673.          case BL_WI:</span>
+
  <span id="line673">673.        case BL_WI:</span>
  <span id="line674">674.              fieldfmt = " Wi:%s";</span>
+
  <span id="line674">674.            fieldfmt = " Wi:%s";</span>
  <span id="line675">675.              fieldname = "wisdom";</span>
+
  <span id="line675">675.            fieldname = "wisdom";</span>
  <span id="line676">676.              status_enablefield(fld, fieldname, fieldfmt, TRUE);</span>
+
  <span id="line676">676.            status_enablefield(fld, fieldname, fieldfmt, TRUE);</span>
  <span id="line677">677.              break;</span>
+
  <span id="line677">677.            break;</span>
  <span id="line678">678.          case BL_CH:</span>
+
  <span id="line678">678.        case BL_CH:</span>
  <span id="line679">679.              fieldfmt = " Ch:%s";</span>
+
  <span id="line679">679.            fieldfmt = " Ch:%s";</span>
  <span id="line680">680.              fieldname = "charisma";</span>
+
  <span id="line680">680.            fieldname = "charisma";</span>
  <span id="line681">681.              status_enablefield(fld, fieldname, fieldfmt, TRUE);</span>
+
  <span id="line681">681.            status_enablefield(fld, fieldname, fieldfmt, TRUE);</span>
  <span id="line682">682.              break;</span>
+
  <span id="line682">682.            break;</span>
  <span id="line683">683.          case BL_ALIGN:</span>
+
  <span id="line683">683.        case BL_ALIGN:</span>
  <span id="line684">684.              fieldfmt = " %s";</span>
+
  <span id="line684">684.            fieldfmt = " %s";</span>
  <span id="line685">685.              fieldname = "alignment";</span>
+
  <span id="line685">685.            fieldname = "alignment";</span>
  <span id="line686">686.              status_enablefield(fld, fieldname, fieldfmt, TRUE);</span>
+
  <span id="line686">686.            status_enablefield(fld, fieldname, fieldfmt, TRUE);</span>
  <span id="line687">687.              break;</span>
+
  <span id="line687">687.            break;</span>
  <span id="line688">688.          case BL_SCORE:</span>
+
  <span id="line688">688.        case BL_SCORE:</span>
  <span id="line689">689.              fieldfmt = " S:%s";</span>
+
  <span id="line689">689.            fieldfmt = " S:%s";</span>
  <span id="line690">690.              fieldname = "score";</span>
+
  <span id="line690">690.            fieldname = "score";</span>
  <span id="line691">691.              status_enablefield(fld, fieldname, fieldfmt,</span>
+
  <span id="line691">691.            status_enablefield(fld, fieldname, fieldfmt,</span>
  <span id="line692">692.                                (!flags.showscore) ? FALSE : TRUE);</span>
+
  <span id="line692">692.                                (!flags.showscore) ? FALSE : TRUE);</span>
  <span id="line693">693.              break;</span>
+
  <span id="line693">693.            break;</span>
  <span id="line694">694.          case BL_CAP:</span>
+
  <span id="line694">694.        case BL_CAP:</span>
  <span id="line695">695.              fieldfmt = " %s";</span>
+
  <span id="line695">695.            fieldfmt = " %s";</span>
  <span id="line696">696.              fieldname = "carrying-capacity";</span>
+
  <span id="line696">696.            fieldname = "carrying-capacity";</span>
  <span id="line697">697.              status_enablefield(fld, fieldname, fieldfmt, TRUE);</span>
+
  <span id="line697">697.            status_enablefield(fld, fieldname, fieldfmt, TRUE);</span>
  <span id="line698">698.              break;</span>
+
  <span id="line698">698.            break;</span>
  <span id="line699">699.          case BL_GOLD:</span>
+
  <span id="line699">699.        case BL_GOLD:</span>
  <span id="line700">700.              fieldfmt = " %s";</span>
+
  <span id="line700">700.            fieldfmt = " %s";</span>
  <span id="line701">701.              fieldname = "gold";</span>
+
  <span id="line701">701.            fieldname = "gold";</span>
  <span id="line702">702.              status_enablefield(fld, fieldname, fieldfmt, TRUE);</span>
+
  <span id="line702">702.            status_enablefield(fld, fieldname, fieldfmt, TRUE);</span>
  <span id="line703">703.              break;</span>
+
  <span id="line703">703.            break;</span>
  <span id="line704">704.          case BL_ENE:</span>
+
  <span id="line704">704.        case BL_ENE:</span>
  <span id="line705">705.              fieldfmt = " Pw:%s";</span>
+
  <span id="line705">705.            fieldfmt = " Pw:%s";</span>
  <span id="line706">706.              fieldname = "power";</span>
+
  <span id="line706">706.            fieldname = "power";</span>
  <span id="line707">707.              status_enablefield(fld, fieldname, fieldfmt, TRUE);</span>
+
  <span id="line707">707.            status_enablefield(fld, fieldname, fieldfmt, TRUE);</span>
  <span id="line708">708.              break;</span>
+
  <span id="line708">708.            break;</span>
  <span id="line709">709.          case BL_ENEMAX:</span>
+
  <span id="line709">709.        case BL_ENEMAX:</span>
  <span id="line710">710.              fieldfmt = "(%s)";</span>
+
  <span id="line710">710.            fieldfmt = "(%s)";</span>
  <span id="line711">711.              fieldname = "power-max";</span>
+
  <span id="line711">711.            fieldname = "power-max";</span>
  <span id="line712">712.              status_enablefield(fld, fieldname, fieldfmt, TRUE);</span>
+
  <span id="line712">712.            status_enablefield(fld, fieldname, fieldfmt, TRUE);</span>
  <span id="line713">713.              break;</span>
+
  <span id="line713">713.            break;</span>
  <span id="line714">714.          case BL_XP:</span>
+
  <span id="line714">714.        case BL_XP:</span>
  <span id="line715">715.              fieldfmt = " Xp:%s";</span>
+
  <span id="line715">715.            fieldfmt = " Xp:%s";</span>
  <span id="line716">716.              fieldname = "experience-level";</span>
+
  <span id="line716">716.            fieldname = "experience-level";</span>
  <span id="line717">717.              status_enablefield(fld, fieldname, fieldfmt,</span>
+
  <span id="line717">717.            status_enablefield(fld, fieldname, fieldfmt,</span>
  <span id="line718">718.                                    (Upolyd) ? FALSE : TRUE);</span>
+
  <span id="line718">718.                                    (Upolyd) ? FALSE : TRUE);</span>
  <span id="line719">719.              break;</span>
+
  <span id="line719">719.            break;</span>
  <span id="line720">720.          case BL_AC:</span>
+
  <span id="line720">720.        case BL_AC:</span>
  <span id="line721">721.              fieldfmt = " AC:%s";</span>
+
  <span id="line721">721.            fieldfmt = " AC:%s";</span>
  <span id="line722">722.              fieldname = "armor-class";</span>
+
  <span id="line722">722.            fieldname = "armor-class";</span>
  <span id="line723">723.              status_enablefield(fld, fieldname, fieldfmt, TRUE);</span>
+
  <span id="line723">723.            status_enablefield(fld, fieldname, fieldfmt, TRUE);</span>
  <span id="line724">724.              break;</span>
+
  <span id="line724">724.            break;</span>
  <span id="line725">725.          case BL_HD:</span>
+
  <span id="line725">725.        case BL_HD:</span>
  <span id="line726">726.              fieldfmt = " HD:%s";</span>
+
  <span id="line726">726.            fieldfmt = " HD:%s";</span>
  <span id="line727">727.              fieldname = "HD";</span>
+
  <span id="line727">727.            fieldname = "HD";</span>
  <span id="line728">728.              status_enablefield(fld, fieldname, fieldfmt,</span>
+
  <span id="line728">728.            status_enablefield(fld, fieldname, fieldfmt,</span>
  <span id="line729">729.                                    (!Upolyd) ? FALSE : TRUE);</span>
+
  <span id="line729">729.                                    (!Upolyd) ? FALSE : TRUE);</span>
  <span id="line730">730.              break;</span>
+
  <span id="line730">730.            break;</span>
  <span id="line731">731.          case BL_TIME:</span>
+
  <span id="line731">731.        case BL_TIME:</span>
  <span id="line732">732.              fieldfmt = " T:%s";</span>
+
  <span id="line732">732.            fieldfmt = " T:%s";</span>
  <span id="line733">733.              fieldname = "time";</span>
+
  <span id="line733">733.            fieldname = "time";</span>
  <span id="line734">734.              status_enablefield(fld, fieldname, fieldfmt,</span>
+
  <span id="line734">734.            status_enablefield(fld, fieldname, fieldfmt,</span>
  <span id="line735">735.                                    (!flags.time) ? FALSE : TRUE);</span>
+
  <span id="line735">735.                                    (!flags.time) ? FALSE : TRUE);</span>
  <span id="line736">736.              break;</span>
+
  <span id="line736">736.            break;</span>
  <span id="line737">737.          case BL_HUNGER:</span>
+
  <span id="line737">737.        case BL_HUNGER:</span>
  <span id="line738">738.              fieldfmt = " %s";</span>
+
  <span id="line738">738.            fieldfmt = " %s";</span>
  <span id="line739">739.              fieldname = "hunger";</span>
+
  <span id="line739">739.            fieldname = "hunger";</span>
  <span id="line740">740.              status_enablefield(fld, fieldname, fieldfmt, TRUE);</span>
+
  <span id="line740">740.            status_enablefield(fld, fieldname, fieldfmt, TRUE);</span>
  <span id="line741">741.              break;</span>
+
  <span id="line741">741.            break;</span>
  <span id="line742">742.          case BL_HP:</span>
+
  <span id="line742">742.        case BL_HP:</span>
  <span id="line743">743.              fieldfmt = " HP:%s";</span>
+
  <span id="line743">743.            fieldfmt = " HP:%s";</span>
  <span id="line744">744.              fieldname = "hitpoints";</span>
+
  <span id="line744">744.            fieldname = "hitpoints";</span>
  <span id="line745">745.              status_enablefield(fld, fieldname, fieldfmt, TRUE);</span>
+
  <span id="line745">745.            status_enablefield(fld, fieldname, fieldfmt, TRUE);</span>
  <span id="line746">746.              break;</span>
+
  <span id="line746">746.            break;</span>
  <span id="line747">747.          case BL_HPMAX:</span>
+
  <span id="line747">747.        case BL_HPMAX:</span>
  <span id="line748">748.              fieldfmt = "(%s)";</span>
+
  <span id="line748">748.            fieldfmt = "(%s)";</span>
  <span id="line749">749.              fieldname = "hitpoint-max";</span>
+
  <span id="line749">749.            fieldname = "hitpoint-max";</span>
  <span id="line750">750.              status_enablefield(fld, fieldname, fieldfmt, TRUE);</span>
+
  <span id="line750">750.            status_enablefield(fld, fieldname, fieldfmt, TRUE);</span>
  <span id="line751">751.              break;</span>
+
  <span id="line751">751.            break;</span>
  <span id="line752">752.          case BL_LEVELDESC:</span>
+
  <span id="line752">752.        case BL_LEVELDESC:</span>
  <span id="line753">753.              fieldfmt = "%s";</span>
+
  <span id="line753">753.            fieldfmt = "%s";</span>
  <span id="line754">754.              fieldname = "dungeon-level";</span>
+
  <span id="line754">754.            fieldname = "dungeon-level";</span>
  <span id="line755">755.              status_enablefield(fld, fieldname, fieldfmt, TRUE);</span>
+
  <span id="line755">755.            status_enablefield(fld, fieldname, fieldfmt, TRUE);</span>
  <span id="line756">756.              break;</span>
+
  <span id="line756">756.            break;</span>
  <span id="line757">757.          case BL_EXP:</span>
+
  <span id="line757">757.        case BL_EXP:</span>
  <span id="line758">758.              fieldfmt = "/%s";</span>
+
  <span id="line758">758.            fieldfmt = "/%s";</span>
  <span id="line759">759.              fieldname = "experience";</span>
+
  <span id="line759">759.            fieldname = "experience";</span>
  <span id="line760">760.              status_enablefield(fld, fieldname, fieldfmt,</span>
+
  <span id="line760">760.            status_enablefield(fld, fieldname, fieldfmt,</span>
  <span id="line761">761.                                    (!flags.showexp || Upolyd) ? FALSE : TRUE);</span>
+
  <span id="line761">761.                                  (!flags.showexp || Upolyd) ? FALSE : TRUE);</span>
  <span id="line762">762.              break;</span>
+
  <span id="line762">762.            break;</span>
  <span id="line763">763.          case BL_CONDITION:</span>
+
  <span id="line763">763.        case BL_CONDITION:</span>
  <span id="line764">764.              fieldfmt = "%S";</span>
+
  <span id="line764">764.            fieldfmt = "%S";</span>
  <span id="line765">765.              fieldname = "condition";</span>
+
  <span id="line765">765.            fieldname = "condition";</span>
  <span id="line766">766.              status_enablefield(fld, fieldname, fieldfmt, TRUE);</span>
+
  <span id="line766">766.            status_enablefield(fld, fieldname, fieldfmt, TRUE);</span>
  <span id="line767">767.              break;</span>
+
  <span id="line767">767.            break;</span>
  <span id="line768">768.          case BL_FLUSH:</span>
+
  <span id="line768">768.        case BL_FLUSH:</span>
  <span id="line769">769.          default:</span>
+
  <span id="line769">769.        default:</span>
  <span id="line770">770.              break;</span>
+
  <span id="line770">770.            break;</span>
  <span id="line771">771.          }</span>
+
  <span id="line771">771.        }</span>
  <span id="line772">772.      }</span>
+
  <span id="line772">772.    }</span>
  <span id="line773">773.      update_all = TRUE;</span>
+
  <span id="line773">773.    update_all = TRUE;</span>
  <span id="line774">774.  }</span>
+
  <span id="line774">774. }</span>
  <span id="line775">775.  </span>
+
  <span id="line775">775. </span>
  
 
=== status_finish ===
 
=== status_finish ===
 
 
  <span id="line776">776.  void</span>
+
  <span id="line776">776. void</span>
  <span id="line777">777.  status_finish()</span>
+
  <span id="line777">777. status_finish()</span>
  <span id="line778">778.  {</span>
+
  <span id="line778">778. {</span>
  <span id="line779">779.      int i;</span>
+
  <span id="line779">779.    int i;</span>
  <span id="line780">780.  </span>
+
  <span id="line780">780. </span>
  <span id="line781">781.      /* call the window port cleanup routine first */</span>
+
  <span id="line781">781.    /* call the window port cleanup routine first */</span>
  <span id="line782">782.      (*windowprocs.win_status_finish)();</span>
+
  <span id="line782">782.    (*windowprocs.win_status_finish)();</span>
  <span id="line783">783.  </span>
+
  <span id="line783">783. </span>
  <span id="line784">784.      /* free memory that we alloc'd now */</span>
+
  <span id="line784">784.    /* free memory that we alloc'd now */</span>
  <span id="line785">785.      for (i = 0; i < MAXBLSTATS; ++i) {</span>
+
  <span id="line785">785.    for (i = 0; i < MAXBLSTATS; ++i) {</span>
  <span id="line786">786.          if (blstats[0][i].val)</span>
+
  <span id="line786">786.        if (blstats[0][i].val)</span>
  <span id="line787">787.              free((genericptr_t) blstats[0][i].val);</span>
+
  <span id="line787">787.            free((genericptr_t) blstats[0][i].val);</span>
  <span id="line788">788.          if (blstats[1][i].val)</span>
+
  <span id="line788">788.        if (blstats[1][i].val)</span>
  <span id="line789">789.              free((genericptr_t) blstats[1][i].val);</span>
+
  <span id="line789">789.            free((genericptr_t) blstats[1][i].val);</span>
  <span id="line790">790.      }</span>
+
  <span id="line790">790.    }</span>
  <span id="line791">791.  }</span>
+
  <span id="line791">791. }</span>
  <span id="line792">792.  </span>
+
  <span id="line792">792. </span>
  
 
=== init_blstats ===
 
=== init_blstats ===
 
 
  <span id="line793">793.  STATIC_OVL void</span>
+
  <span id="line793">793. STATIC_OVL void</span>
  <span id="line794">794.  init_blstats()</span>
+
  <span id="line794">794. init_blstats()</span>
  <span id="line795">795.  {</span>
+
  <span id="line795">795. {</span>
  <span id="line796">796.      static boolean initalready = FALSE;</span>
+
  <span id="line796">796.    static boolean initalready = FALSE;</span>
  <span id="line797">797.      int i, j;</span>
+
  <span id="line797">797.    int i, j;</span>
  <span id="line798">798.  </span>
+
  <span id="line798">798. </span>
  <span id="line799">799.      if (initalready) {</span>
+
  <span id="line799">799.    if (initalready) {</span>
  <span id="line800">800.          impossible("init_blstats called more than once.");</span>
+
  <span id="line800">800.        impossible("init_blstats called more than once.");</span>
  <span id="line801">801.          return;</span>
+
  <span id="line801">801.        return;</span>
  <span id="line802">802.      }</span>
+
  <span id="line802">802.    }</span>
  <span id="line803">803.  </span>
+
  <span id="line803">803. </span>
  <span id="line804">804.      initalready = TRUE;</span>
+
  <span id="line804">804.    initalready = TRUE;</span>
  <span id="line805">805.      for (i = BEFORE; i <= NOW; ++i) {</span>
+
  <span id="line805">805.    for (i = BEFORE; i <= NOW; ++i) {</span>
  <span id="line806">806.          for (j = 0; j < MAXBLSTATS; ++j) {</span>
+
  <span id="line806">806.        for (j = 0; j < MAXBLSTATS; ++j) {</span>
  <span id="line807">807.              blstats[i][j] = initblstats[j];</span>
+
  <span id="line807">807.            blstats[i][j] = initblstats[j];</span>
  <span id="line808">808.              blstats[i][j].a = zeroany;</span>
+
  <span id="line808">808.            blstats[i][j].a = zeroany;</span>
  <span id="line809">809.              if (blstats[i][j].valwidth) {</span>
+
  <span id="line809">809.            if (blstats[i][j].valwidth) {</span>
  <span id="line810">810.                  blstats[i][j].val = (char *) alloc(blstats[i][j].valwidth);</span>
+
  <span id="line810">810.                blstats[i][j].val = (char *) alloc(blstats[i][j].valwidth);</span>
  <span id="line811">811.                  blstats[i][j].val[0] = '\0';</span>
+
  <span id="line811">811.                blstats[i][j].val[0] = '\0';</span>
  <span id="line812">812.              } else</span>
+
  <span id="line812">812.            } else</span>
  <span id="line813">813.                  blstats[i][j].val = (char *) 0;</span>
+
  <span id="line813">813.                blstats[i][j].val = (char *) 0;</span>
  <span id="line814">814.          }</span>
+
  <span id="line814">814.        }</span>
  <span id="line815">815.      }</span>
+
  <span id="line815">815.    }</span>
  <span id="line816">816.  }</span>
+
  <span id="line816">816. }</span>
  <span id="line817">817.  </span>
+
  <span id="line817">817. </span>
  
 
=== anything_to_s ===
 
=== anything_to_s ===
 
 
  <span id="line818">818.  STATIC_OVL char *</span>
+
  <span id="line818">818. STATIC_OVL char *</span>
  <span id="line819">819.  anything_to_s(buf, a, anytype)</span>
+
  <span id="line819">819. anything_to_s(buf, a, anytype)</span>
  <span id="line820">820.  char *buf;</span>
+
  <span id="line820">820. char *buf;</span>
  <span id="line821">821.  anything *a;</span>
+
  <span id="line821">821. anything *a;</span>
  <span id="line822">822.  int anytype;</span>
+
  <span id="line822">822. int anytype;</span>
  <span id="line823">823.  {</span>
+
  <span id="line823">823. {</span>
  <span id="line824">824.      if (!buf)</span>
+
  <span id="line824">824.    if (!buf)</span>
  <span id="line825">825.          return (char *) 0;</span>
+
  <span id="line825">825.        return (char *) 0;</span>
  <span id="line826">826.  </span>
+
  <span id="line826">826. </span>
  <span id="line827">827.      switch (anytype) {</span>
+
  <span id="line827">827.    switch (anytype) {</span>
  <span id="line828">828.      case ANY_ULONG:</span>
+
  <span id="line828">828.    case ANY_ULONG:</span>
  <span id="line829">829.          Sprintf(buf, "%lu", a->a_ulong);</span>
+
  <span id="line829">829.        Sprintf(buf, "%lu", a->a_ulong);</span>
  <span id="line830">830.          break;</span>
+
  <span id="line830">830.        break;</span>
  <span id="line831">831.      case ANY_MASK32:</span>
+
  <span id="line831">831.    case ANY_MASK32:</span>
  <span id="line832">832.          Sprintf(buf, "%lx", a->a_ulong);</span>
+
  <span id="line832">832.        Sprintf(buf, "%lx", a->a_ulong);</span>
  <span id="line833">833.          break;</span>
+
  <span id="line833">833.        break;</span>
  <span id="line834">834.      case ANY_LONG:</span>
+
  <span id="line834">834.    case ANY_LONG:</span>
  <span id="line835">835.          Sprintf(buf, "%ld", a->a_long);</span>
+
  <span id="line835">835.        Sprintf(buf, "%ld", a->a_long);</span>
  <span id="line836">836.          break;</span>
+
  <span id="line836">836.        break;</span>
  <span id="line837">837.      case ANY_INT:</span>
+
  <span id="line837">837.    case ANY_INT:</span>
  <span id="line838">838.          Sprintf(buf, "%d", a->a_int);</span>
+
  <span id="line838">838.        Sprintf(buf, "%d", a->a_int);</span>
  <span id="line839">839.          break;</span>
+
  <span id="line839">839.        break;</span>
  <span id="line840">840.      case ANY_UINT:</span>
+
  <span id="line840">840.    case ANY_UINT:</span>
  <span id="line841">841.          Sprintf(buf, "%u", a->a_uint);</span>
+
  <span id="line841">841.        Sprintf(buf, "%u", a->a_uint);</span>
  <span id="line842">842.          break;</span>
+
  <span id="line842">842.        break;</span>
  <span id="line843">843.      case ANY_IPTR:</span>
+
  <span id="line843">843.    case ANY_IPTR:</span>
  <span id="line844">844.          Sprintf(buf, "%d", *a->a_iptr);</span>
+
  <span id="line844">844.        Sprintf(buf, "%d", *a->a_iptr);</span>
  <span id="line845">845.          break;</span>
+
  <span id="line845">845.        break;</span>
  <span id="line846">846.      case ANY_LPTR:</span>
+
  <span id="line846">846.    case ANY_LPTR:</span>
  <span id="line847">847.          Sprintf(buf, "%ld", *a->a_lptr);</span>
+
  <span id="line847">847.        Sprintf(buf, "%ld", *a->a_lptr);</span>
  <span id="line848">848.          break;</span>
+
  <span id="line848">848.        break;</span>
  <span id="line849">849.      case ANY_ULPTR:</span>
+
  <span id="line849">849.    case ANY_ULPTR:</span>
  <span id="line850">850.          Sprintf(buf, "%lu", *a->a_ulptr);</span>
+
  <span id="line850">850.        Sprintf(buf, "%lu", *a->a_ulptr);</span>
  <span id="line851">851.          break;</span>
+
  <span id="line851">851.        break;</span>
  <span id="line852">852.      case ANY_UPTR:</span>
+
  <span id="line852">852.    case ANY_UPTR:</span>
  <span id="line853">853.          Sprintf(buf, "%u", *a->a_uptr);</span>
+
  <span id="line853">853.        Sprintf(buf, "%u", *a->a_uptr);</span>
  <span id="line854">854.          break;</span>
+
  <span id="line854">854.        break;</span>
  <span id="line855">855.      case ANY_STR: /* do nothing */</span>
+
  <span id="line855">855.    case ANY_STR: /* do nothing */</span>
  <span id="line856">856.          ;</span>
+
  <span id="line856">856.        ;</span>
  <span id="line857">857.          break;</span>
+
  <span id="line857">857.        break;</span>
  <span id="line858">858.      default:</span>
+
  <span id="line858">858.    default:</span>
  <span id="line859">859.          buf[0] = '\0';</span>
+
  <span id="line859">859.        buf[0] = '\0';</span>
  <span id="line860">860.      }</span>
+
  <span id="line860">860.    }</span>
  <span id="line861">861.      return buf;</span>
+
  <span id="line861">861.    return buf;</span>
  <span id="line862">862.  }</span>
+
  <span id="line862">862. }</span>
  <span id="line863">863.  </span>
+
  <span id="line863">863. </span>
  
 
=== s_to_anything ===
 
=== s_to_anything ===
 
 
  <span id="line864">864.  STATIC_OVL void</span>
+
  <span id="line864">864. STATIC_OVL void</span>
  <span id="line865">865.  s_to_anything(a, buf, anytype)</span>
+
  <span id="line865">865. s_to_anything(a, buf, anytype)</span>
  <span id="line866">866.  anything *a;</span>
+
  <span id="line866">866. anything *a;</span>
  <span id="line867">867.  char *buf;</span>
+
  <span id="line867">867. char *buf;</span>
  <span id="line868">868.  int anytype;</span>
+
  <span id="line868">868. int anytype;</span>
  <span id="line869">869.  {</span>
+
  <span id="line869">869. {</span>
  <span id="line870">870.      if (!buf || !a)</span>
+
  <span id="line870">870.    if (!buf || !a)</span>
  <span id="line871">871.          return;</span>
+
  <span id="line871">871.        return;</span>
  <span id="line872">872.  </span>
+
  <span id="line872">872. </span>
  <span id="line873">873.      switch (anytype) {</span>
+
  <span id="line873">873.    switch (anytype) {</span>
  <span id="line874">874.      case ANY_LONG:</span>
+
  <span id="line874">874.    case ANY_LONG:</span>
  <span id="line875">875.          a->a_long = atol(buf);</span>
+
  <span id="line875">875.        a->a_long = atol(buf);</span>
  <span id="line876">876.          break;</span>
+
  <span id="line876">876.        break;</span>
  <span id="line877">877.      case ANY_INT:</span>
+
  <span id="line877">877.    case ANY_INT:</span>
  <span id="line878">878.          a->a_int = atoi(buf);</span>
+
  <span id="line878">878.        a->a_int = atoi(buf);</span>
  <span id="line879">879.          break;</span>
+
  <span id="line879">879.        break;</span>
  <span id="line880">880.      case ANY_UINT:</span>
+
  <span id="line880">880.    case ANY_UINT:</span>
  <span id="line881">881.          a->a_uint = (unsigned) atoi(buf);</span>
+
  <span id="line881">881.        a->a_uint = (unsigned) atoi(buf);</span>
  <span id="line882">882.          break;</span>
+
  <span id="line882">882.        break;</span>
  <span id="line883">883.      case ANY_ULONG:</span>
+
  <span id="line883">883.    case ANY_ULONG:</span>
  <span id="line884">884.          a->a_ulong = (unsigned long) atol(buf);</span>
+
  <span id="line884">884.        a->a_ulong = (unsigned long) atol(buf);</span>
  <span id="line885">885.          break;</span>
+
  <span id="line885">885.        break;</span>
  <span id="line886">886.      case ANY_IPTR:</span>
+
  <span id="line886">886.    case ANY_IPTR:</span>
  <span id="line887">887.          if (a->a_iptr)</span>
+
  <span id="line887">887.        if (a->a_iptr)</span>
  <span id="line888">888.              *a->a_iptr = atoi(buf);</span>
+
  <span id="line888">888.            *a->a_iptr = atoi(buf);</span>
  <span id="line889">889.          break;</span>
+
  <span id="line889">889.        break;</span>
  <span id="line890">890.      case ANY_UPTR:</span>
+
  <span id="line890">890.    case ANY_UPTR:</span>
  <span id="line891">891.          if (a->a_uptr)</span>
+
  <span id="line891">891.        if (a->a_uptr)</span>
  <span id="line892">892.              *a->a_uptr = (unsigned) atoi(buf);</span>
+
  <span id="line892">892.            *a->a_uptr = (unsigned) atoi(buf);</span>
  <span id="line893">893.          break;</span>
+
  <span id="line893">893.        break;</span>
  <span id="line894">894.      case ANY_LPTR:</span>
+
  <span id="line894">894.    case ANY_LPTR:</span>
  <span id="line895">895.          if (a->a_lptr)</span>
+
  <span id="line895">895.        if (a->a_lptr)</span>
  <span id="line896">896.              *a->a_lptr = atol(buf);</span>
+
  <span id="line896">896.            *a->a_lptr = atol(buf);</span>
  <span id="line897">897.          break;</span>
+
  <span id="line897">897.        break;</span>
  <span id="line898">898.      case ANY_ULPTR:</span>
+
  <span id="line898">898.    case ANY_ULPTR:</span>
  <span id="line899">899.          if (a->a_ulptr)</span>
+
  <span id="line899">899.        if (a->a_ulptr)</span>
  <span id="line900">900.              *a->a_ulptr = (unsigned long) atol(buf);</span>
+
  <span id="line900">900.            *a->a_ulptr = (unsigned long) atol(buf);</span>
  <span id="line901">901.          break;</span>
+
  <span id="line901">901.        break;</span>
  <span id="line902">902.      case ANY_MASK32:</span>
+
  <span id="line902">902.    case ANY_MASK32:</span>
  <span id="line903">903.          a->a_ulong = (unsigned long) atol(buf);</span>
+
  <span id="line903">903.        a->a_ulong = (unsigned long) atol(buf);</span>
  <span id="line904">904.          break;</span>
+
  <span id="line904">904.        break;</span>
  <span id="line905">905.      default:</span>
+
  <span id="line905">905.    default:</span>
  <span id="line906">906.          a->a_void = 0;</span>
+
  <span id="line906">906.        a->a_void = 0;</span>
  <span id="line907">907.          break;</span>
+
  <span id="line907">907.        break;</span>
  <span id="line908">908.      }</span>
+
  <span id="line908">908.    }</span>
  <span id="line909">909.      return;</span>
+
  <span id="line909">909.    return;</span>
  <span id="line910">910.  }</span>
+
  <span id="line910">910. }</span>
  <span id="line911">911.  </span>
+
  <span id="line911">911. </span>
  
 
=== compare_blstats ===
 
=== compare_blstats ===
 
 
  <span id="line912">912.  STATIC_OVL int</span>
+
  <span id="line912">912. STATIC_OVL int</span>
  <span id="line913">913.  compare_blstats(bl1, bl2)</span>
+
  <span id="line913">913. compare_blstats(bl1, bl2)</span>
  <span id="line914">914.  struct istat_s *bl1, *bl2;</span>
+
  <span id="line914">914. struct istat_s *bl1, *bl2;</span>
  <span id="line915">915.  {</span>
+
  <span id="line915">915. {</span>
  <span id="line916">916.      int anytype, result = 0;</span>
+
  <span id="line916">916.    int anytype, result = 0;</span>
  <span id="line917">917.  </span>
+
  <span id="line917">917. </span>
  <span id="line918">918.      if (!bl1 || !bl2) {</span>
+
  <span id="line918">918.    if (!bl1 || !bl2) {</span>
  <span id="line919">919.          panic("compare_blstat: bad istat pointer %s, %s",</span>
+
  <span id="line919">919.        panic("compare_blstat: bad istat pointer %s, %s",</span>
  <span id="line920">920.                fmt_ptr((genericptr_t) bl1), fmt_ptr((genericptr_t) bl2));</span>
+
  <span id="line920">920.              fmt_ptr((genericptr_t) bl1), fmt_ptr((genericptr_t) bl2));</span>
  <span id="line921">921.      }</span>
+
  <span id="line921">921.    }</span>
  <span id="line922">922.  </span>
+
  <span id="line922">922. </span>
  <span id="line923">923.      anytype = bl1->anytype;</span>
+
  <span id="line923">923.    anytype = bl1->anytype;</span>
  <span id="line924">924.      if ((!bl1->a.a_void || !bl2->a.a_void)</span>
+
  <span id="line924">924.    if ((!bl1->a.a_void || !bl2->a.a_void)</span>
  <span id="line925">925.          && (anytype == ANY_IPTR || anytype == ANY_UPTR || anytype == ANY_LPTR</span>
+
  <span id="line925">925.        && (anytype == ANY_IPTR || anytype == ANY_UPTR || anytype == ANY_LPTR</span>
  <span id="line926">926.              || anytype == ANY_ULPTR)) {</span>
+
  <span id="line926">926.            || anytype == ANY_ULPTR)) {</span>
  <span id="line927">927.          panic("compare_blstat: invalid pointer %s, %s",</span>
+
  <span id="line927">927.        panic("compare_blstat: invalid pointer %s, %s",</span>
  <span id="line928">928.                fmt_ptr((genericptr_t) bl1->a.a_void),</span>
+
  <span id="line928">928.              fmt_ptr((genericptr_t) bl1->a.a_void),</span>
  <span id="line929">929.                fmt_ptr((genericptr_t) bl2->a.a_void));</span>
+
  <span id="line929">929.              fmt_ptr((genericptr_t) bl2->a.a_void));</span>
  <span id="line930">930.      }</span>
+
  <span id="line930">930.    }</span>
  <span id="line931">931.  </span>
+
  <span id="line931">931. </span>
  <span id="line932">932.      switch (anytype) {</span>
+
  <span id="line932">932.    switch (anytype) {</span>
  <span id="line933">933.      case ANY_INT:</span>
+
  <span id="line933">933.    case ANY_INT:</span>
  <span id="line934">934.          result = (bl1->a.a_int < bl2->a.a_int)</span>
+
  <span id="line934">934.        result = (bl1->a.a_int < bl2->a.a_int)</span>
  <span id="line935">935.                      ? 1</span>
+
  <span id="line935">935.                      ? 1</span>
  <span id="line936">936.                      : (bl1->a.a_int > bl2->a.a_int) ? -1 : 0;</span>
+
  <span id="line936">936.                      : (bl1->a.a_int > bl2->a.a_int) ? -1 : 0;</span>
  <span id="line937">937.          break;</span>
+
  <span id="line937">937.        break;</span>
  <span id="line938">938.      case ANY_IPTR:</span>
+
  <span id="line938">938.    case ANY_IPTR:</span>
  <span id="line939">939.          result = (*bl1->a.a_iptr < *bl2->a.a_iptr)</span>
+
  <span id="line939">939.        result = (*bl1->a.a_iptr < *bl2->a.a_iptr)</span>
  <span id="line940">940.                      ? 1</span>
+
  <span id="line940">940.                      ? 1</span>
  <span id="line941">941.                      : (*bl1->a.a_iptr > *bl2->a.a_iptr) ? -1 : 0;</span>
+
  <span id="line941">941.                      : (*bl1->a.a_iptr > *bl2->a.a_iptr) ? -1 : 0;</span>
  <span id="line942">942.          break;</span>
+
  <span id="line942">942.        break;</span>
  <span id="line943">943.      case ANY_LONG:</span>
+
  <span id="line943">943.    case ANY_LONG:</span>
  <span id="line944">944.          result = (bl1->a.a_long < bl2->a.a_long)</span>
+
  <span id="line944">944.        result = (bl1->a.a_long < bl2->a.a_long)</span>
  <span id="line945">945.                      ? 1</span>
+
  <span id="line945">945.                      ? 1</span>
  <span id="line946">946.                      : (bl1->a.a_long > bl2->a.a_long) ? -1 : 0;</span>
+
  <span id="line946">946.                      : (bl1->a.a_long > bl2->a.a_long) ? -1 : 0;</span>
  <span id="line947">947.          break;</span>
+
  <span id="line947">947.        break;</span>
  <span id="line948">948.      case ANY_LPTR:</span>
+
  <span id="line948">948.    case ANY_LPTR:</span>
  <span id="line949">949.          result = (*bl1->a.a_lptr < *bl2->a.a_lptr)</span>
+
  <span id="line949">949.        result = (*bl1->a.a_lptr < *bl2->a.a_lptr)</span>
  <span id="line950">950.                      ? 1</span>
+
  <span id="line950">950.                      ? 1</span>
  <span id="line951">951.                      : (*bl1->a.a_lptr > *bl2->a.a_lptr) ? -1 : 0;</span>
+
  <span id="line951">951.                      : (*bl1->a.a_lptr > *bl2->a.a_lptr) ? -1 : 0;</span>
  <span id="line952">952.          break;</span>
+
  <span id="line952">952.        break;</span>
  <span id="line953">953.      case ANY_UINT:</span>
+
  <span id="line953">953.    case ANY_UINT:</span>
  <span id="line954">954.          result = (bl1->a.a_uint < bl2->a.a_uint)</span>
+
  <span id="line954">954.        result = (bl1->a.a_uint < bl2->a.a_uint)</span>
  <span id="line955">955.                      ? 1</span>
+
  <span id="line955">955.                      ? 1</span>
  <span id="line956">956.                      : (bl1->a.a_uint > bl2->a.a_uint) ? -1 : 0;</span>
+
  <span id="line956">956.                      : (bl1->a.a_uint > bl2->a.a_uint) ? -1 : 0;</span>
  <span id="line957">957.          break;</span>
+
  <span id="line957">957.        break;</span>
  <span id="line958">958.      case ANY_UPTR:</span>
+
  <span id="line958">958.    case ANY_UPTR:</span>
  <span id="line959">959.          result = (*bl1->a.a_uptr < *bl2->a.a_uptr)</span>
+
  <span id="line959">959.        result = (*bl1->a.a_uptr < *bl2->a.a_uptr)</span>
  <span id="line960">960.                      ? 1</span>
+
  <span id="line960">960.                      ? 1</span>
  <span id="line961">961.                      : (*bl1->a.a_uptr > *bl2->a.a_uptr) ? -1 : 0;</span>
+
  <span id="line961">961.                      : (*bl1->a.a_uptr > *bl2->a.a_uptr) ? -1 : 0;</span>
  <span id="line962">962.          break;</span>
+
  <span id="line962">962.        break;</span>
  <span id="line963">963.      case ANY_ULONG:</span>
+
  <span id="line963">963.    case ANY_ULONG:</span>
  <span id="line964">964.          result = (bl1->a.a_ulong < bl2->a.a_ulong)</span>
+
  <span id="line964">964.        result = (bl1->a.a_ulong < bl2->a.a_ulong)</span>
  <span id="line965">965.                      ? 1</span>
+
  <span id="line965">965.                      ? 1</span>
  <span id="line966">966.                      : (bl1->a.a_ulong > bl2->a.a_ulong) ? -1 : 0;</span>
+
  <span id="line966">966.                      : (bl1->a.a_ulong > bl2->a.a_ulong) ? -1 : 0;</span>
  <span id="line967">967.          break;</span>
+
  <span id="line967">967.        break;</span>
  <span id="line968">968.      case ANY_ULPTR:</span>
+
  <span id="line968">968.    case ANY_ULPTR:</span>
  <span id="line969">969.          result = (*bl1->a.a_ulptr < *bl2->a.a_ulptr)</span>
+
  <span id="line969">969.        result = (*bl1->a.a_ulptr < *bl2->a.a_ulptr)</span>
  <span id="line970">970.                      ? 1</span>
+
  <span id="line970">970.                      ? 1</span>
  <span id="line971">971.                      : (*bl1->a.a_ulptr > *bl2->a.a_ulptr) ? -1 : 0;</span>
+
  <span id="line971">971.                      : (*bl1->a.a_ulptr > *bl2->a.a_ulptr) ? -1 : 0;</span>
  <span id="line972">972.          break;</span>
+
  <span id="line972">972.        break;</span>
  <span id="line973">973.      case ANY_STR:</span>
+
  <span id="line973">973.    case ANY_STR:</span>
  <span id="line974">974.          if (strcmp(bl1->val, bl2->val) == 0)</span>
+
  <span id="line974">974.        if (strcmp(bl1->val, bl2->val) == 0)</span>
  <span id="line975">975.              result = 0;</span>
+
  <span id="line975">975.            result = 0;</span>
  <span id="line976">976.          else</span>
+
  <span id="line976">976.        else</span>
  <span id="line977">977.              result = 1;</span>
+
  <span id="line977">977.            result = 1;</span>
  <span id="line978">978.          break;</span>
+
  <span id="line978">978.        break;</span>
  <span id="line979">979.      case ANY_MASK32:</span>
+
  <span id="line979">979.    case ANY_MASK32:</span>
  <span id="line980">980.          if (bl1->a.a_ulong == bl2->a.a_ulong)</span>
+
  <span id="line980">980.        if (bl1->a.a_ulong == bl2->a.a_ulong)</span>
  <span id="line981">981.              result = 0;</span>
+
  <span id="line981">981.            result = 0;</span>
  <span id="line982">982.          else</span>
+
  <span id="line982">982.        else</span>
  <span id="line983">983.              result = 1;</span>
+
  <span id="line983">983.            result = 1;</span>
  <span id="line984">984.          break;</span>
+
  <span id="line984">984.        break;</span>
  <span id="line985">985.      default:</span>
+
  <span id="line985">985.    default:</span>
  <span id="line986">986.          result = 1;</span>
+
  <span id="line986">986.        result = 1;</span>
  <span id="line987">987.      }</span>
+
  <span id="line987">987.    }</span>
  <span id="line988">988.      return result;</span>
+
  <span id="line988">988.    return result;</span>
  <span id="line989">989.  }</span>
+
  <span id="line989">989. }</span>
  <span id="line990">990.  </span>
+
  <span id="line990">990. </span>
  
 
=== percentage ===
 
=== percentage ===
 
 
  <span id="line991">991.  STATIC_OVL int</span>
+
  <span id="line991">991. STATIC_OVL int</span>
  <span id="line992">992.  percentage(bl, maxbl)</span>
+
  <span id="line992">992. percentage(bl, maxbl)</span>
  <span id="line993">993.  struct istat_s *bl, *maxbl;</span>
+
  <span id="line993">993. struct istat_s *bl, *maxbl;</span>
  <span id="line994">994.  {</span>
+
  <span id="line994">994. {</span>
  <span id="line995">995.      int result = 0;</span>
+
  <span id="line995">995.    int result = 0;</span>
  <span id="line996">996.      int anytype;</span>
+
  <span id="line996">996.    int anytype;</span>
  <span id="line997">997.  </span>
+
  <span id="line997">997. </span>
  <span id="line998">998.      if (!bl || !maxbl) {</span>
+
  <span id="line998">998.    if (!bl || !maxbl) {</span>
  <span id="line999">999.          impossible("percentage: bad istat pointer %s, %s",</span>
+
  <span id="line999">999.        impossible("percentage: bad istat pointer %s, %s",</span>
  <span id="line1000">1000.                    fmt_ptr((genericptr_t) bl), fmt_ptr((genericptr_t) maxbl));</span>
+
  <span id="line1000">1000.                    fmt_ptr((genericptr_t) bl), fmt_ptr((genericptr_t) maxbl));</span>
  <span id="line1001">1001.          return 0;</span>
+
  <span id="line1001">1001.        return 0;</span>
  <span id="line1002">1002.      }</span>
+
  <span id="line1002">1002.    }</span>
  <span id="line1003">1003.  </span>
+
  <span id="line1003">1003. </span>
  <span id="line1004">1004.      anytype = bl->anytype;</span>
+
  <span id="line1004">1004.    anytype = bl->anytype;</span>
  <span id="line1005">1005.      if (maxbl->a.a_void) {</span>
+
  <span id="line1005">1005.    if (maxbl->a.a_void) {</span>
  <span id="line1006">1006.          switch (anytype) {</span>
+
  <span id="line1006">1006.        switch (anytype) {</span>
  <span id="line1007">1007.          case ANY_INT:</span>
+
  <span id="line1007">1007.        case ANY_INT:</span>
  <span id="line1008">1008.              result = ((100 * bl->a.a_int) / maxbl->a.a_int);</span>
+
  <span id="line1008">1008.            result = ((100 * bl->a.a_int) / maxbl->a.a_int);</span>
  <span id="line1009">1009.              break;</span>
+
  <span id="line1009">1009.            break;</span>
  <span id="line1010">1010.          case ANY_LONG:</span>
+
  <span id="line1010">1010.        case ANY_LONG:</span>
  <span id="line1011">1011.              result = (int) ((100L * bl->a.a_long) / maxbl->a.a_long);</span>
+
  <span id="line1011">1011.            result = (int) ((100L * bl->a.a_long) / maxbl->a.a_long);</span>
  <span id="line1012">1012.              break;</span>
+
  <span id="line1012">1012.            break;</span>
  <span id="line1013">1013.          case ANY_UINT:</span>
+
  <span id="line1013">1013.        case ANY_UINT:</span>
  <span id="line1014">1014.              result = (int) ((100U * bl->a.a_uint) / maxbl->a.a_uint);</span>
+
  <span id="line1014">1014.            result = (int) ((100U * bl->a.a_uint) / maxbl->a.a_uint);</span>
  <span id="line1015">1015.              break;</span>
+
  <span id="line1015">1015.            break;</span>
  <span id="line1016">1016.          case ANY_ULONG:</span>
+
  <span id="line1016">1016.        case ANY_ULONG:</span>
  <span id="line1017">1017.              result = (int) ((100UL * bl->a.a_ulong) / maxbl->a.a_ulong);</span>
+
  <span id="line1017">1017.            result = (int) ((100UL * bl->a.a_ulong) / maxbl->a.a_ulong);</span>
  <span id="line1018">1018.              break;</span>
+
  <span id="line1018">1018.            break;</span>
  <span id="line1019">1019.          case ANY_IPTR:</span>
+
  <span id="line1019">1019.        case ANY_IPTR:</span>
  <span id="line1020">1020.              result = ((100 * (*bl->a.a_iptr)) / (*maxbl->a.a_iptr));</span>
+
  <span id="line1020">1020.            result = ((100 * (*bl->a.a_iptr)) / (*maxbl->a.a_iptr));</span>
  <span id="line1021">1021.              break;</span>
+
  <span id="line1021">1021.            break;</span>
  <span id="line1022">1022.          case ANY_LPTR:</span>
+
  <span id="line1022">1022.        case ANY_LPTR:</span>
  <span id="line1023">1023.              result = (int) ((100L * (*bl->a.a_lptr)) / (*maxbl->a.a_lptr));</span>
+
  <span id="line1023">1023.            result = (int) ((100L * (*bl->a.a_lptr)) / (*maxbl->a.a_lptr));</span>
  <span id="line1024">1024.              break;</span>
+
  <span id="line1024">1024.            break;</span>
  <span id="line1025">1025.          case ANY_UPTR:</span>
+
  <span id="line1025">1025.        case ANY_UPTR:</span>
  <span id="line1026">1026.              result = (int) ((100U * (*bl->a.a_uptr)) / (*maxbl->a.a_uptr));</span>
+
  <span id="line1026">1026.            result = (int) ((100U * (*bl->a.a_uptr)) / (*maxbl->a.a_uptr));</span>
  <span id="line1027">1027.              break;</span>
+
  <span id="line1027">1027.            break;</span>
  <span id="line1028">1028.          case ANY_ULPTR:</span>
+
  <span id="line1028">1028.        case ANY_ULPTR:</span>
  <span id="line1029">1029.              result = (int) ((100UL * (*bl->a.a_ulptr)) / (*maxbl->a.a_ulptr));</span>
+
  <span id="line1029">1029.            result = (int) ((100UL * (*bl->a.a_ulptr)) / (*maxbl->a.a_ulptr));</span>
  <span id="line1030">1030.              break;</span>
+
  <span id="line1030">1030.            break;</span>
  <span id="line1031">1031.          }</span>
+
  <span id="line1031">1031.        }</span>
  <span id="line1032">1032.      }</span>
+
  <span id="line1032">1032.    }</span>
  <span id="line1033">1033.      return result;</span>
+
  <span id="line1033">1033.    return result;</span>
  <span id="line1034">1034.  }</span>
+
  <span id="line1034">1034. }</span>
  <span id="line1035">1035.  </span>
+
  <span id="line1035">1035. </span>
  <span id="line1036">1036.  </span>
+
  <span id="line1036">1036. </span>
  
 
=== set_status_hilites ===
 
=== set_status_hilites ===
  
  <span id="line1037">1037.  #ifdef STATUS_HILITES</span>
+
  <span id="line1037">1037. #ifdef STATUS_HILITES</span>
  <span id="line1038">1038.  </span>
+
  <span id="line1038">1038. </span>
  <span id="line1039">1039.  /****************************************************************************/</span>
+
  <span id="line1039">1039. /****************************************************************************/</span>
  <span id="line1040">1040.  /* Core status hiliting support */</span>
+
  <span id="line1040">1040. /* Core status hiliting support */</span>
  <span id="line1041">1041.  /****************************************************************************/</span>
+
  <span id="line1041">1041. /****************************************************************************/</span>
  <span id="line1042">1042.  </span>
+
  <span id="line1042">1042. </span>
  <span id="line1043">1043.  struct hilite_s {</span>
+
  <span id="line1043">1043. struct hilite_s {</span>
  <span id="line1044">1044.      boolean set;</span>
+
  <span id="line1044">1044.    boolean set;</span>
  <span id="line1045">1045.      unsigned anytype;</span>
+
  <span id="line1045">1045.    unsigned anytype;</span>
  <span id="line1046">1046.      anything threshold;</span>
+
  <span id="line1046">1046.    anything threshold;</span>
  <span id="line1047">1047.      int behavior;</span>
+
  <span id="line1047">1047.    int behavior;</span>
  <span id="line1048">1048.      int coloridx[2];</span>
+
  <span id="line1048">1048.    int coloridx[2];</span>
  <span id="line1049">1049.  };</span>
+
  <span id="line1049">1049. };</span>
  <span id="line1050">1050.  </span>
+
  <span id="line1050">1050. </span>
  <span id="line1051">1051.  struct hilite_s status_hilites[MAXBLSTATS];</span>
+
  <span id="line1051">1051. struct hilite_s status_hilites[MAXBLSTATS];</span>
  <span id="line1052">1052.  </span>
+
  <span id="line1052">1052. </span>
  <span id="line1053">1053.  /*</span>
+
  <span id="line1053">1053. /*</span>
  <span id="line1054">1054.  * This is the parser for the hilite options</span>
+
  <span id="line1054">1054.  * This is the parser for the hilite options</span>
  <span id="line1055">1055.  * Example:</span>
+
  <span id="line1055">1055.  * Example:</span>
  <span id="line1056">1056.  *    OPTION=hilite_status: hitpoints/10%/red/normal</span>
+
  <span id="line1056">1056.  *    OPTION=hilite_status: hitpoints/10%/red/normal</span>
  <span id="line1057">1057.  *</span>
+
  <span id="line1057">1057.  *</span>
  <span id="line1058">1058.  * set_hilite_status() separates each hilite entry into its 4 component</span>
+
  <span id="line1058">1058.  * set_hilite_status() separates each hilite entry into its 4 component</span>
  <span id="line1059">1059.  * strings, then calls assign_hilite() to make the adjustments.</span>
+
  <span id="line1059">1059.  * strings, then calls assign_hilite() to make the adjustments.</span>
  <span id="line1060">1060.  */</span>
+
  <span id="line1060">1060.  */</span>
  <span id="line1061">1061.  boolean</span>
+
  <span id="line1061">1061. boolean</span>
  <span id="line1062">1062.  set_status_hilites(op, from_configfile)</span>
+
  <span id="line1062">1062. set_status_hilites(op, from_configfile)</span>
  <span id="line1063">1063.  char *op;</span>
+
  <span id="line1063">1063. char *op;</span>
  <span id="line1064">1064.  boolean from_configfile;</span>
+
  <span id="line1064">1064. boolean from_configfile;</span>
  <span id="line1065">1065.  {</span>
+
  <span id="line1065">1065. {</span>
  <span id="line1066">1066.      char hsbuf[4][QBUFSZ];</span>
+
  <span id="line1066">1066.    char hsbuf[4][QBUFSZ];</span>
  <span id="line1067">1067.      boolean rslt, badopt = FALSE;</span>
+
  <span id="line1067">1067.    boolean rslt, badopt = FALSE;</span>
  <span id="line1068">1068.      int fldnum, num = 0, ccount = 0;</span>
+
  <span id="line1068">1068.    int fldnum, num = 0, ccount = 0;</span>
  <span id="line1069">1069.      char c;</span>
+
  <span id="line1069">1069.    char c;</span>
  <span id="line1070">1070.  </span>
+
  <span id="line1070">1070. </span>
  <span id="line1071">1071.      num = fldnum = 0;</span>
+
  <span id="line1071">1071.    num = fldnum = 0;</span>
  <span id="line1072">1072.      hsbuf[0][0] = hsbuf[1][0] = hsbuf[2][0] = hsbuf[3][0] = '\0';</span>
+
  <span id="line1072">1072.    hsbuf[0][0] = hsbuf[1][0] = hsbuf[2][0] = hsbuf[3][0] = '\0';</span>
  <span id="line1073">1073.      while (*op && fldnum < 4 && ccount < (QBUFSZ - 2)) {</span>
+
  <span id="line1073">1073.    while (*op && fldnum < 4 && ccount < (QBUFSZ - 2)) {</span>
  <span id="line1074">1074.          c = lowc(*op);</span>
+
  <span id="line1074">1074.        c = lowc(*op);</span>
  <span id="line1075">1075.          if (c == ' ') {</span>
+
  <span id="line1075">1075.        if (c == ' ') {</span>
  <span id="line1076">1076.              if (fldnum >= 2) {</span>
+
  <span id="line1076">1076.            if (fldnum >= 2) {</span>
  <span id="line1077">1077.                  rslt = assign_hilite(&hsbuf[0][0], &hsbuf[1][0], &hsbuf[2][0],</span>
+
  <span id="line1077">1077.                rslt = assign_hilite(&hsbuf[0][0], &hsbuf[1][0], &hsbuf[2][0],</span>
  <span id="line1078">1078.                                      &hsbuf[3][0], from_configfile);</span>
+
  <span id="line1078">1078.                                      &hsbuf[3][0], from_configfile);</span>
  <span id="line1079">1079.                  if (!rslt) {</span>
+
  <span id="line1079">1079.                if (!rslt) {</span>
  <span id="line1080">1080.                      badopt = TRUE;</span>
+
  <span id="line1080">1080.                    badopt = TRUE;</span>
  <span id="line1081">1081.                      break;</span>
+
  <span id="line1081">1081.                    break;</span>
  <span id="line1082">1082.                  }</span>
+
  <span id="line1082">1082.                }</span>
  <span id="line1083">1083.              }</span>
+
  <span id="line1083">1083.            }</span>
  <span id="line1084">1084.              hsbuf[0][0] = hsbuf[1][0] = '\0';</span>
+
  <span id="line1084">1084.            hsbuf[0][0] = hsbuf[1][0] = '\0';</span>
  <span id="line1085">1085.              hsbuf[2][0] = hsbuf[3][0] = '\0';</span>
+
  <span id="line1085">1085.            hsbuf[2][0] = hsbuf[3][0] = '\0';</span>
  <span id="line1086">1086.              fldnum = 0;</span>
+
  <span id="line1086">1086.            fldnum = 0;</span>
  <span id="line1087">1087.              ccount = 0;</span>
+
  <span id="line1087">1087.            ccount = 0;</span>
  <span id="line1088">1088.          } else if (c == '/') {</span>
+
  <span id="line1088">1088.        } else if (c == '/') {</span>
  <span id="line1089">1089.              fldnum++;</span>
+
  <span id="line1089">1089.            fldnum++;</span>
  <span id="line1090">1090.              ccount = 0;</span>
+
  <span id="line1090">1090.            ccount = 0;</span>
  <span id="line1091">1091.          } else {</span>
+
  <span id="line1091">1091.        } else {</span>
  <span id="line1092">1092.              hsbuf[fldnum][ccount++] = c;</span>
+
  <span id="line1092">1092.            hsbuf[fldnum][ccount++] = c;</span>
  <span id="line1093">1093.              hsbuf[fldnum][ccount] = '\0';</span>
+
  <span id="line1093">1093.            hsbuf[fldnum][ccount] = '\0';</span>
  <span id="line1094">1094.          }</span>
+
  <span id="line1094">1094.        }</span>
  <span id="line1095">1095.          op++;</span>
+
  <span id="line1095">1095.        op++;</span>
  <span id="line1096">1096.      }</span>
+
  <span id="line1096">1096.    }</span>
  <span id="line1097">1097.      if (fldnum >= 2 && !badopt) {</span>
+
  <span id="line1097">1097.    if (fldnum >= 2 && !badopt) {</span>
  <span id="line1098">1098.          rslt = assign_hilite(&hsbuf[0][0], &hsbuf[1][0], &hsbuf[2][0],</span>
+
  <span id="line1098">1098.        rslt = assign_hilite(&hsbuf[0][0], &hsbuf[1][0], &hsbuf[2][0],</span>
  <span id="line1099">1099.                              &hsbuf[3][0], from_configfile);</span>
+
  <span id="line1099">1099.                              &hsbuf[3][0], from_configfile);</span>
  <span id="line1100">1100.          if (!rslt)</span>
+
  <span id="line1100">1100.        if (!rslt)</span>
  <span id="line1101">1101.              badopt = TRUE;</span>
+
  <span id="line1101">1101.            badopt = TRUE;</span>
  <span id="line1102">1102.      }</span>
+
  <span id="line1102">1102.    }</span>
  <span id="line1103">1103.      if (badopt)</span>
+
  <span id="line1103">1103.    if (badopt)</span>
  <span id="line1104">1104.          return FALSE;</span>
+
  <span id="line1104">1104.        return FALSE;</span>
  <span id="line1105">1105.      return TRUE;</span>
+
  <span id="line1105">1105.    return TRUE;</span>
  <span id="line1106">1106.  }</span>
+
  <span id="line1106">1106. }</span>
  <span id="line1107">1107.  </span>
+
  <span id="line1107">1107. </span>
  
 
=== clear_status_hilites ===
 
=== clear_status_hilites ===
 
 
  <span id="line1108">1108.  void</span>
+
  <span id="line1108">1108. void</span>
  <span id="line1109">1109.  clear_status_hilites(from_configfile)</span>
+
  <span id="line1109">1109. clear_status_hilites(from_configfile)</span>
  <span id="line1110">1110.  boolean from_configfile;</span>
+
  <span id="line1110">1110. boolean from_configfile;</span>
  <span id="line1111">1111.  {</span>
+
  <span id="line1111">1111. {</span>
  <span id="line1112">1112.      int i;</span>
+
  <span id="line1112">1112.    int i;</span>
  <span id="line1113">1113.      anything it;</span>
+
  <span id="line1113">1113.    anything it;</span>
  <span id="line1114">1114.      it = zeroany;</span>
+
  <span id="line1114">1114.    it = zeroany;</span>
  <span id="line1115">1115.      for (i = 0; i < MAXBLSTATS; ++i) {</span>
+
  <span id="line1115">1115.    for (i = 0; i < MAXBLSTATS; ++i) {</span>
  <span id="line1116">1116.          (void) memset((genericptr_t) &status_hilites[i], 0,</span>
+
  <span id="line1116">1116.        (void) memset((genericptr_t) &status_hilites[i], 0,</span>
  <span id="line1117">1117.                        sizeof(struct hilite_s));</span>
+
  <span id="line1117">1117.                      sizeof(struct hilite_s));</span>
  <span id="line1118">1118.          /* notify window port */</span>
+
  <span id="line1118">1118.        /* notify window port */</span>
  <span id="line1119">1119.          if (!from_configfile)</span>
+
  <span id="line1119">1119.        if (!from_configfile)</span>
  <span id="line1120">1120.              status_threshold(i, blstats[0][i].anytype, it, 0, 0, 0);</span>
+
  <span id="line1120">1120.            status_threshold(i, blstats[0][i].anytype, it, 0, 0, 0);</span>
  <span id="line1121">1121.      }</span>
+
  <span id="line1121">1121.    }</span>
  <span id="line1122">1122.  }</span>
+
  <span id="line1122">1122. }</span>
  <span id="line1123">1123.  </span>
+
  <span id="line1123">1123. </span>
  
 
=== assign_hilite ===
 
=== assign_hilite ===
 
 
  <span id="line1124">1124.  STATIC_OVL boolean</span>
+
  <span id="line1124">1124. STATIC_OVL boolean</span>
  <span id="line1125">1125.  assign_hilite(sa, sb, sc, sd, from_configfile)</span>
+
  <span id="line1125">1125. assign_hilite(sa, sb, sc, sd, from_configfile)</span>
  <span id="line1126">1126.  char *sa, *sb, *sc, *sd;</span>
+
  <span id="line1126">1126. char *sa, *sb, *sc, *sd;</span>
  <span id="line1127">1127.  boolean from_configfile;</span>
+
  <span id="line1127">1127. boolean from_configfile;</span>
  <span id="line1128">1128.  {</span>
+
  <span id="line1128">1128. {</span>
  <span id="line1129">1129.      char *tmp, *how;</span>
+
  <span id="line1129">1129.    char *tmp, *how;</span>
  <span id="line1130">1130.      int i = -1, dt = -1, idx = -1;</span>
+
  <span id="line1130">1130.    int i = -1, dt = -1, idx = -1;</span>
  <span id="line1131">1131.      int coloridx[2] = { -1, -1 };</span>
+
  <span id="line1131">1131.    int coloridx[2] = { -1, -1 };</span>
  <span id="line1132">1132.      boolean inverse[2] = { FALSE, FALSE };</span>
+
  <span id="line1132">1132.    boolean inverse[2] = { FALSE, FALSE };</span>
  <span id="line1133">1133.      boolean bold[2] = { FALSE, FALSE };</span>
+
  <span id="line1133">1133.    boolean bold[2] = { FALSE, FALSE };</span>
  <span id="line1134">1134.      boolean normal[2] = { 0, 0 };</span>
+
  <span id="line1134">1134.    boolean normal[2] = { 0, 0 };</span>
  <span id="line1135">1135.      boolean percent = FALSE, down_up = FALSE, changed = FALSE;</span>
+
  <span id="line1135">1135.    boolean percent = FALSE, down_up = FALSE, changed = FALSE;</span>
  <span id="line1136">1136.      anything threshold;</span>
+
  <span id="line1136">1136.    anything threshold;</span>
  <span id="line1137">1137.      enum statusfields fld = BL_FLUSH;</span>
+
  <span id="line1137">1137.    enum statusfields fld = BL_FLUSH;</span>
  <span id="line1138">1138.      threshold.a_void = 0;</span>
+
  <span id="line1138">1138.    threshold.a_void = 0;</span>
  <span id="line1139">1139.  </span>
+
  <span id="line1139">1139. </span>
  <span id="line1140">1140.      /* Example:</span>
+
  <span id="line1140">1140.    /* Example:</span>
  <span id="line1141">1141.      *  hilite_status: hitpoints/10%/red/normal</span>
+
  <span id="line1141">1141.      *  hilite_status: hitpoints/10%/red/normal</span>
  <span id="line1142">1142.      */</span>
+
  <span id="line1142">1142.      */</span>
  <span id="line1143">1143.  </span>
+
  <span id="line1143">1143. </span>
  <span id="line1144">1144.      /* field name to statusfield */</span>
+
  <span id="line1144">1144.    /* field name to statusfield */</span>
  <span id="line1145">1145.      for (i = 0; sa && i < SIZE(fieldids); ++i) {</span>
+
  <span id="line1145">1145.    for (i = 0; sa && i < SIZE(fieldids); ++i) {</span>
  <span id="line1146">1146.          if (strcmpi(sa, fieldids[i].fieldname) == 0) {</span>
+
  <span id="line1146">1146.        if (strcmpi(sa, fieldids[i].fieldname) == 0) {</span>
  <span id="line1147">1147.              idx = i;</span>
+
  <span id="line1147">1147.            idx = i;</span>
  <span id="line1148">1148.              fld = fieldids[i].fldid;</span>
+
  <span id="line1148">1148.            fld = fieldids[i].fldid;</span>
  <span id="line1149">1149.              break;</span>
+
  <span id="line1149">1149.            break;</span>
  <span id="line1150">1150.          }</span>
+
  <span id="line1150">1150.        }</span>
  <span id="line1151">1151.      }</span>
+
  <span id="line1151">1151.    }</span>
  <span id="line1152">1152.      if (idx == -1)</span>
+
  <span id="line1152">1152.    if (idx == -1)</span>
  <span id="line1153">1153.          return FALSE;</span>
+
  <span id="line1153">1153.        return FALSE;</span>
  <span id="line1154">1154.      status_hilites[idx].set = FALSE; /* mark it "unset" */</span>
+
  <span id="line1154">1154.    status_hilites[idx].set = FALSE; /* mark it "unset" */</span>
  <span id="line1155">1155.  </span>
+
  <span id="line1155">1155. </span>
  <span id="line1156">1156.      /* threshold */</span>
+
  <span id="line1156">1156.    /* threshold */</span>
  <span id="line1157">1157.      if (!sb)</span>
+
  <span id="line1157">1157.    if (!sb)</span>
  <span id="line1158">1158.          return FALSE;</span>
+
  <span id="line1158">1158.        return FALSE;</span>
  <span id="line1159">1159.      if ((strcmpi(sb, "updown") == 0) || (strcmpi(sb, "downup") == 0)</span>
+
  <span id="line1159">1159.    if ((strcmpi(sb, "updown") == 0) || (strcmpi(sb, "downup") == 0)</span>
  <span id="line1160">1160.          || (strcmpi(sb, "up") == 0) || (strcmpi(sb, "down") == 0)) {</span>
+
  <span id="line1160">1160.        || (strcmpi(sb, "up") == 0) || (strcmpi(sb, "down") == 0)) {</span>
  <span id="line1161">1161.          down_up = TRUE;</span>
+
  <span id="line1161">1161.        down_up = TRUE;</span>
  <span id="line1162">1162.      } else if ((strcmpi(sb, "changed") == 0)</span>
+
  <span id="line1162">1162.    } else if ((strcmpi(sb, "changed") == 0)</span>
  <span id="line1163">1163.                && (fld == BL_TITLE || fld == BL_ALIGN || fld == BL_LEVELDESC</span>
+
  <span id="line1163">1163.                && (fld == BL_TITLE || fld == BL_ALIGN || fld == BL_LEVELDESC</span>
  <span id="line1164">1164.                    || fld == BL_CONDITION)) {</span>
+
  <span id="line1164">1164.                    || fld == BL_CONDITION)) {</span>
  <span id="line1165">1165.          changed = TRUE; /* changed is only thing allowed */</span>
+
  <span id="line1165">1165.        changed = TRUE; /* changed is only thing allowed */</span>
  <span id="line1166">1166.      } else {</span>
+
  <span id="line1166">1166.    } else {</span>
  <span id="line1167">1167.          tmp = sb;</span>
+
  <span id="line1167">1167.        tmp = sb;</span>
  <span id="line1168">1168.          while (*tmp) {</span>
+
  <span id="line1168">1168.        while (*tmp) {</span>
  <span id="line1169">1169.              if (*tmp == '%') {</span>
+
  <span id="line1169">1169.            if (*tmp == '%') {</span>
  <span id="line1170">1170.                  *tmp = '\0';</span>
+
  <span id="line1170">1170.                *tmp = '\0';</span>
  <span id="line1171">1171.                  percent = TRUE;</span>
+
  <span id="line1171">1171.                percent = TRUE;</span>
  <span id="line1172">1172.                  break;</span>
+
  <span id="line1172">1172.                break;</span>
  <span id="line1173">1173.              } else if (!index("0123456789", *tmp))</span>
+
  <span id="line1173">1173.            } else if (!index("0123456789", *tmp))</span>
  <span id="line1174">1174.                  return FALSE;</span>
+
  <span id="line1174">1174.                return FALSE;</span>
  <span id="line1175">1175.              tmp++;</span>
+
  <span id="line1175">1175.            tmp++;</span>
  <span id="line1176">1176.          }</span>
+
  <span id="line1176">1176.        }</span>
  <span id="line1177">1177.          if (strlen(sb) > 0) {</span>
+
  <span id="line1177">1177.        if (strlen(sb) > 0) {</span>
  <span id="line1178">1178.              dt = blstats[0][idx].anytype;</span>
+
  <span id="line1178">1178.            dt = blstats[0][idx].anytype;</span>
  <span id="line1179">1179.              if (percent)</span>
+
  <span id="line1179">1179.            if (percent)</span>
  <span id="line1180">1180.                  dt = ANY_INT;</span>
+
  <span id="line1180">1180.                dt = ANY_INT;</span>
  <span id="line1181">1181.              (void) s_to_anything(&threshold, sb, dt);</span>
+
  <span id="line1181">1181.            (void) s_to_anything(&threshold, sb, dt);</span>
  <span id="line1182">1182.          } else</span>
+
  <span id="line1182">1182.        } else</span>
  <span id="line1183">1183.              return FALSE;</span>
+
  <span id="line1183">1183.            return FALSE;</span>
  <span id="line1184">1184.          if (percent && (threshold.a_int < 1 || threshold.a_int > 100))</span>
+
  <span id="line1184">1184.        if (percent && (threshold.a_int < 1 || threshold.a_int > 100))</span>
  <span id="line1185">1185.              return FALSE;</span>
+
  <span id="line1185">1185.            return FALSE;</span>
  <span id="line1186">1186.          if (!threshold.a_void && (strcmp(sb, "0") != 0))</span>
+
  <span id="line1186">1186.        if (!threshold.a_void && (strcmp(sb, "0") != 0))</span>
  <span id="line1187">1187.              return FALSE;</span>
+
  <span id="line1187">1187.            return FALSE;</span>
  <span id="line1188">1188.      }</span>
+
  <span id="line1188">1188.    }</span>
  <span id="line1189">1189.  </span>
+
  <span id="line1189">1189. </span>
  <span id="line1190">1190.      /* actions */</span>
+
  <span id="line1190">1190.    /* actions */</span>
  <span id="line1191">1191.      for (i = 0; i < 2; ++i) {</span>
+
  <span id="line1191">1191.    for (i = 0; i < 2; ++i) {</span>
  <span id="line1192">1192.          if (!i)</span>
+
  <span id="line1192">1192.        if (!i)</span>
  <span id="line1193">1193.              how = sc;</span>
+
  <span id="line1193">1193.            how = sc;</span>
  <span id="line1194">1194.          else</span>
+
  <span id="line1194">1194.        else</span>
  <span id="line1195">1195.              how = sd;</span>
+
  <span id="line1195">1195.            how = sd;</span>
  <span id="line1196">1196.          if (!how) {</span>
+
  <span id="line1196">1196.        if (!how) {</span>
  <span id="line1197">1197.              if (!i)</span>
+
  <span id="line1197">1197.            if (!i)</span>
  <span id="line1198">1198.                  return FALSE;</span>
+
  <span id="line1198">1198.                return FALSE;</span>
  <span id="line1199">1199.              else</span>
+
  <span id="line1199">1199.            else</span>
  <span id="line1200">1200.                  break; /* sc is mandatory; sd is not */</span>
+
  <span id="line1200">1200.                break; /* sc is mandatory; sd is not */</span>
  <span id="line1201">1201.          }</span>
+
  <span id="line1201">1201.        }</span>
  <span id="line1202">1202.  </span>
+
  <span id="line1202">1202. </span>
  <span id="line1203">1203.          if (strcmpi(how, "bold") == 0) {</span>
+
  <span id="line1203">1203.        if (strcmpi(how, "bold") == 0) {</span>
  <span id="line1204">1204.              bold[i] = TRUE;</span>
+
  <span id="line1204">1204.            bold[i] = TRUE;</span>
  <span id="line1205">1205.          } else if (strcmpi(how, "inverse") == 0) {</span>
+
  <span id="line1205">1205.        } else if (strcmpi(how, "inverse") == 0) {</span>
  <span id="line1206">1206.              inverse[i] = TRUE;</span>
+
  <span id="line1206">1206.            inverse[i] = TRUE;</span>
  <span id="line1207">1207.          } else if (strcmpi(how, "normal") == 0) {</span>
+
  <span id="line1207">1207.        } else if (strcmpi(how, "normal") == 0) {</span>
  <span id="line1208">1208.              normal[i] = TRUE;</span>
+
  <span id="line1208">1208.            normal[i] = TRUE;</span>
  <span id="line1209">1209.          } else {</span>
+
  <span id="line1209">1209.        } else {</span>
  <span id="line1210">1210.              int k;</span>
+
  <span id="line1210">1210.            int k;</span>
  <span id="line1211">1211.              char colorname[BUFSZ];</span>
+
  <span id="line1211">1211.            char colorname[BUFSZ];</span>
  <span id="line1212">1212.              for (k = 0; k < CLR_MAX; ++k) {</span>
+
  <span id="line1212">1212.            for (k = 0; k < CLR_MAX; ++k) {</span>
  <span id="line1213">1213.                  /* we have to make a copy to change space to dash */</span>
+
  <span id="line1213">1213.                /* we have to make a copy to change space to dash */</span>
  <span id="line1214">1214.                  (void) strcpy(colorname, c_obj_colors[k]);</span>
+
  <span id="line1214">1214.                (void) strcpy(colorname, c_obj_colors[k]);</span>
  <span id="line1215">1215.                  for (tmp = index(colorname, ' '); tmp;</span>
+
  <span id="line1215">1215.                for (tmp = index(colorname, ' '); tmp;</span>
  <span id="line1216">1216.                      tmp = index(colorname, ' '))</span>
+
  <span id="line1216">1216.                      tmp = index(colorname, ' '))</span>
  <span id="line1217">1217.                      *tmp = '-';</span>
+
  <span id="line1217">1217.                    *tmp = '-';</span>
  <span id="line1218">1218.                  if (strcmpi(how, colorname) == 0) {</span>
+
  <span id="line1218">1218.                if (strcmpi(how, colorname) == 0) {</span>
  <span id="line1219">1219.                      coloridx[i] = k;</span>
+
  <span id="line1219">1219.                    coloridx[i] = k;</span>
  <span id="line1220">1220.                      break;</span>
+
  <span id="line1220">1220.                    break;</span>
  <span id="line1221">1221.                  }</span>
+
  <span id="line1221">1221.                }</span>
  <span id="line1222">1222.              }</span>
+
  <span id="line1222">1222.            }</span>
  <span id="line1223">1223.              if (k >= CLR_MAX)</span>
+
  <span id="line1223">1223.            if (k >= CLR_MAX)</span>
  <span id="line1224">1224.                  return FALSE;</span>
+
  <span id="line1224">1224.                return FALSE;</span>
  <span id="line1225">1225.          }</span>
+
  <span id="line1225">1225.        }</span>
  <span id="line1226">1226.      }</span>
+
  <span id="line1226">1226.    }</span>
  <span id="line1227">1227.  </span>
+
  <span id="line1227">1227. </span>
  <span id="line1228">1228.      /* Assign the values */</span>
+
  <span id="line1228">1228.    /* Assign the values */</span>
  <span id="line1229">1229.  </span>
+
  <span id="line1229">1229. </span>
  <span id="line1230">1230.      for (i = 0; i < 2; ++i) {</span>
+
  <span id="line1230">1230.    for (i = 0; i < 2; ++i) {</span>
  <span id="line1231">1231.          if (inverse[i])</span>
+
  <span id="line1231">1231.        if (inverse[i])</span>
  <span id="line1232">1232.              status_hilites[idx].coloridx[i] = BL_HILITE_INVERSE;</span>
+
  <span id="line1232">1232.            status_hilites[idx].coloridx[i] = BL_HILITE_INVERSE;</span>
  <span id="line1233">1233.          else if (bold[i])</span>
+
  <span id="line1233">1233.        else if (bold[i])</span>
  <span id="line1234">1234.              status_hilites[idx].coloridx[i] = BL_HILITE_BOLD;</span>
+
  <span id="line1234">1234.            status_hilites[idx].coloridx[i] = BL_HILITE_BOLD;</span>
  <span id="line1235">1235.          else if (coloridx[i])</span>
+
  <span id="line1235">1235.        else if (coloridx[i])</span>
  <span id="line1236">1236.              status_hilites[idx].coloridx[i] = coloridx[i];</span>
+
  <span id="line1236">1236.            status_hilites[idx].coloridx[i] = coloridx[i];</span>
  <span id="line1237">1237.          else</span>
+
  <span id="line1237">1237.        else</span>
  <span id="line1238">1238.              status_hilites[idx].coloridx[i] = BL_HILITE_NONE;</span>
+
  <span id="line1238">1238.            status_hilites[idx].coloridx[i] = BL_HILITE_NONE;</span>
  <span id="line1239">1239.      }</span>
+
  <span id="line1239">1239.    }</span>
  <span id="line1240">1240.  </span>
+
  <span id="line1240">1240. </span>
  <span id="line1241">1241.      if (percent)</span>
+
  <span id="line1241">1241.    if (percent)</span>
  <span id="line1242">1242.          status_hilites[idx].behavior = BL_TH_VAL_PERCENTAGE;</span>
+
  <span id="line1242">1242.        status_hilites[idx].behavior = BL_TH_VAL_PERCENTAGE;</span>
  <span id="line1243">1243.      else if (down_up)</span>
+
  <span id="line1243">1243.    else if (down_up)</span>
  <span id="line1244">1244.          status_hilites[idx].behavior = BL_TH_UPDOWN;</span>
+
  <span id="line1244">1244.        status_hilites[idx].behavior = BL_TH_UPDOWN;</span>
  <span id="line1245">1245.      else if (threshold.a_void)</span>
+
  <span id="line1245">1245.    else if (threshold.a_void)</span>
  <span id="line1246">1246.          status_hilites[idx].behavior = BL_TH_VAL_ABSOLUTE;</span>
+
  <span id="line1246">1246.        status_hilites[idx].behavior = BL_TH_VAL_ABSOLUTE;</span>
  <span id="line1247">1247.      else</span>
+
  <span id="line1247">1247.    else</span>
  <span id="line1248">1248.          status_hilites[idx].behavior = BL_TH_NONE;</span>
+
  <span id="line1248">1248.        status_hilites[idx].behavior = BL_TH_NONE;</span>
  <span id="line1249">1249.  </span>
+
  <span id="line1249">1249. </span>
  <span id="line1250">1250.      if (status_hilites[idx].behavior != BL_TH_NONE) {</span>
+
  <span id="line1250">1250.    if (status_hilites[idx].behavior != BL_TH_NONE) {</span>
  <span id="line1251">1251.          status_hilites[idx].threshold = threshold;</span>
+
  <span id="line1251">1251.        status_hilites[idx].threshold = threshold;</span>
  <span id="line1252">1252.          status_hilites[idx].set = TRUE;</span>
+
  <span id="line1252">1252.        status_hilites[idx].set = TRUE;</span>
  <span id="line1253">1253.      }</span>
+
  <span id="line1253">1253.    }</span>
  <span id="line1254">1254.      status_hilites[idx].anytype = dt;</span>
+
  <span id="line1254">1254.    status_hilites[idx].anytype = dt;</span>
  <span id="line1255">1255.  </span>
+
  <span id="line1255">1255. </span>
  <span id="line1256">1256.      /* Now finally, we notify the window port */</span>
+
  <span id="line1256">1256.    /* Now finally, we notify the window port */</span>
  <span id="line1257">1257.      if (!from_configfile)</span>
+
  <span id="line1257">1257.    if (!from_configfile)</span>
  <span id="line1258">1258.          status_threshold(idx, status_hilites[idx].anytype,</span>
+
  <span id="line1258">1258.        status_threshold(idx, status_hilites[idx].anytype,</span>
  <span id="line1259">1259.                          status_hilites[idx].threshold,</span>
+
  <span id="line1259">1259.                        status_hilites[idx].threshold,</span>
  <span id="line1260">1260.                          status_hilites[idx].behavior,</span>
+
  <span id="line1260">1260.                        status_hilites[idx].behavior,</span>
  <span id="line1261">1261.                          status_hilites[idx].coloridx[0],</span>
+
  <span id="line1261">1261.                        status_hilites[idx].coloridx[0],</span>
  <span id="line1262">1262.                          status_hilites[idx].coloridx[1]);</span>
+
  <span id="line1262">1262.                        status_hilites[idx].coloridx[1]);</span>
  <span id="line1263">1263.  </span>
+
  <span id="line1263">1263. </span>
  <span id="line1264">1264.      return TRUE;</span>
+
  <span id="line1264">1264.    return TRUE;</span>
  <span id="line1265">1265.  }</span>
+
  <span id="line1265">1265. }</span>
  <span id="line1266">1266.  </span>
+
  <span id="line1266">1266. </span>
  
 
=== status_notify_windowport ===
 
=== status_notify_windowport ===
 
 
  <span id="line1267">1267.  void</span>
+
  <span id="line1267">1267. void</span>
  <span id="line1268">1268.  status_notify_windowport(all)</span>
+
  <span id="line1268">1268. status_notify_windowport(all)</span>
  <span id="line1269">1269.  boolean all;</span>
+
  <span id="line1269">1269. boolean all;</span>
  <span id="line1270">1270.  {</span>
+
  <span id="line1270">1270. {</span>
  <span id="line1271">1271.      int idx;</span>
+
  <span id="line1271">1271.    int idx;</span>
  <span id="line1272">1272.      anything it;</span>
+
  <span id="line1272">1272.    anything it;</span>
  <span id="line1273">1273.  </span>
+
  <span id="line1273">1273. </span>
  <span id="line1274">1274.      it = zeroany;</span>
+
  <span id="line1274">1274.    it = zeroany;</span>
  <span id="line1275">1275.      for (idx = 0; idx < MAXBLSTATS; ++idx) {</span>
+
  <span id="line1275">1275.    for (idx = 0; idx < MAXBLSTATS; ++idx) {</span>
  <span id="line1276">1276.          if (status_hilites[idx].set)</span>
+
  <span id="line1276">1276.        if (status_hilites[idx].set)</span>
  <span id="line1277">1277.              status_threshold(idx, status_hilites[idx].anytype,</span>
+
  <span id="line1277">1277.            status_threshold(idx, status_hilites[idx].anytype,</span>
  <span id="line1278">1278.                              status_hilites[idx].threshold,</span>
+
  <span id="line1278">1278.                            status_hilites[idx].threshold,</span>
  <span id="line1279">1279.                              status_hilites[idx].behavior,</span>
+
  <span id="line1279">1279.                            status_hilites[idx].behavior,</span>
  <span id="line1280">1280.                              status_hilites[idx].coloridx[0],</span>
+
  <span id="line1280">1280.                            status_hilites[idx].coloridx[0],</span>
  <span id="line1281">1281.                              status_hilites[idx].coloridx[1]);</span>
+
  <span id="line1281">1281.                            status_hilites[idx].coloridx[1]);</span>
  <span id="line1282">1282.          else</span>
+
  <span id="line1282">1282.        else</span>
  <span id="line1283">1283.              status_threshold(idx, blstats[0][idx].anytype, it, 0, 0, 0);</span>
+
  <span id="line1283">1283.            status_threshold(idx, blstats[0][idx].anytype, it, 0, 0, 0);</span>
  <span id="line1284">1284.  </span>
+
  <span id="line1284">1284. </span>
  <span id="line1285">1285.      }</span>
+
  <span id="line1285">1285.    }</span>
  <span id="line1286">1286.  }</span>
+
  <span id="line1286">1286. }</span>
  <span id="line1287">1287.  </span>
+
  <span id="line1287">1287. </span>
  
 
=== get_status_hilites ===
 
=== get_status_hilites ===
 
 
  <span id="line1288">1288.  /*</span>
+
  <span id="line1288">1288. /*</span>
  <span id="line1289">1289.  * get_status_hilites</span>
+
  <span id="line1289">1289.  * get_status_hilites</span>
  <span id="line1290">1290.  *</span>
+
  <span id="line1290">1290.  *</span>
  <span id="line1291">1291.  * Returns a string containing all the status hilites in the</span>
+
  <span id="line1291">1291.  * Returns a string containing all the status hilites in the</span>
  <span id="line1292">1292.  * same format that is used to specify a status hilite preference</span>
+
  <span id="line1292">1292.  * same format that is used to specify a status hilite preference</span>
  <span id="line1293">1293.  * in the config file.</span>
+
  <span id="line1293">1293.  * in the config file.</span>
  <span id="line1294">1294.  */</span>
+
  <span id="line1294">1294.  */</span>
  <span id="line1295">1295.  char *</span>
+
  <span id="line1295">1295. char *</span>
  <span id="line1296">1296.  get_status_hilites(buf, bufsiz)</span>
+
  <span id="line1296">1296. get_status_hilites(buf, bufsiz)</span>
  <span id="line1297">1297.  char *buf;</span>
+
  <span id="line1297">1297. char *buf;</span>
  <span id="line1298">1298.  int bufsiz;</span>
+
  <span id="line1298">1298. int bufsiz;</span>
  <span id="line1299">1299.  {</span>
+
  <span id="line1299">1299. {</span>
  <span id="line1300">1300.      int i, j, k, coloridx;</span>
+
  <span id="line1300">1300.    int i, j, k, coloridx;</span>
  <span id="line1301">1301.      const char *text = (char *) 0;</span>
+
  <span id="line1301">1301.    const char *text = (char *) 0;</span>
  <span id="line1302">1302.      char tmp[BUFSZ], colorname[BUFSZ];</span>
+
  <span id="line1302">1302.    char tmp[BUFSZ], colorname[BUFSZ];</span>
  <span id="line1303">1303.      boolean val_percentage, val_absolute, up_down;</span>
+
  <span id="line1303">1303.    boolean val_percentage, val_absolute, up_down;</span>
  <span id="line1304">1304.      boolean added_one = FALSE;</span>
+
  <span id="line1304">1304.    boolean added_one = FALSE;</span>
  <span id="line1305">1305.  </span>
+
  <span id="line1305">1305. </span>
  <span id="line1306">1306.      if (!buf)</span>
+
  <span id="line1306">1306.    if (!buf)</span>
  <span id="line1307">1307.          return (char *) 0;</span>
+
  <span id="line1307">1307.        return (char *) 0;</span>
  <span id="line1308">1308.      *buf = '\0';</span>
+
  <span id="line1308">1308.    *buf = '\0';</span>
  <span id="line1309">1309.  </span>
+
  <span id="line1309">1309. </span>
  <span id="line1310">1310.      bufsiz--; /* required trailing null */</span>
+
  <span id="line1310">1310.    bufsiz--; /* required trailing null */</span>
  <span id="line1311">1311.      for (i = 0; i < MAXBLSTATS; ++i) {</span>
+
  <span id="line1311">1311.    for (i = 0; i < MAXBLSTATS; ++i) {</span>
  <span id="line1312">1312.          val_percentage = val_absolute = up_down = FALSE;</span>
+
  <span id="line1312">1312.        val_percentage = val_absolute = up_down = FALSE;</span>
  <span id="line1313">1313.          if (status_hilites[i].set) {</span>
+
  <span id="line1313">1313.        if (status_hilites[i].set) {</span>
  <span id="line1314">1314.              if (!added_one)</span>
+
  <span id="line1314">1314.            if (!added_one)</span>
  <span id="line1315">1315.                  added_one = TRUE;</span>
+
  <span id="line1315">1315.                added_one = TRUE;</span>
  <span id="line1316">1316.              else {</span>
+
  <span id="line1316">1316.            else {</span>
  <span id="line1317">1317.                  Strcat(buf, " ");</span>
+
  <span id="line1317">1317.                Strcat(buf, " ");</span>
  <span id="line1318">1318.                  bufsiz--;</span>
+
  <span id="line1318">1318.                bufsiz--;</span>
  <span id="line1319">1319.              }</span>
+
  <span id="line1319">1319.            }</span>
  <span id="line1320">1320.              k = strlen(fieldids[i].fieldname);</span>
+
  <span id="line1320">1320.            k = strlen(fieldids[i].fieldname);</span>
  <span id="line1321">1321.              if (k < bufsiz) {</span>
+
  <span id="line1321">1321.            if (k < bufsiz) {</span>
  <span id="line1322">1322.                  Strcat(buf, fieldids[i].fieldname);</span>
+
  <span id="line1322">1322.                Strcat(buf, fieldids[i].fieldname);</span>
  <span id="line1323">1323.                  bufsiz -= k;</span>
+
  <span id="line1323">1323.                bufsiz -= k;</span>
  <span id="line1324">1324.              }</span>
+
  <span id="line1324">1324.            }</span>
  <span id="line1325">1325.              if (bufsiz > 1) {</span>
+
  <span id="line1325">1325.            if (bufsiz > 1) {</span>
  <span id="line1326">1326.                  Strcat(buf, "/");</span>
+
  <span id="line1326">1326.                Strcat(buf, "/");</span>
  <span id="line1327">1327.                  bufsiz--;</span>
+
  <span id="line1327">1327.                bufsiz--;</span>
  <span id="line1328">1328.              }</span>
+
  <span id="line1328">1328.            }</span>
  <span id="line1329">1329.              if (status_hilites[i].behavior == BL_TH_VAL_PERCENTAGE) {</span>
+
  <span id="line1329">1329.            if (status_hilites[i].behavior == BL_TH_VAL_PERCENTAGE) {</span>
  <span id="line1330">1330.                  val_percentage = TRUE;</span>
+
  <span id="line1330">1330.                val_percentage = TRUE;</span>
  <span id="line1331">1331.              } else if (status_hilites[i].behavior == BL_TH_VAL_ABSOLUTE) {</span>
+
  <span id="line1331">1331.            } else if (status_hilites[i].behavior == BL_TH_VAL_ABSOLUTE) {</span>
  <span id="line1332">1332.                  val_absolute = TRUE;</span>
+
  <span id="line1332">1332.                val_absolute = TRUE;</span>
  <span id="line1333">1333.              } else if (status_hilites[i].behavior == BL_TH_UPDOWN) {</span>
+
  <span id="line1333">1333.            } else if (status_hilites[i].behavior == BL_TH_UPDOWN) {</span>
  <span id="line1334">1334.                  up_down = TRUE;</span>
+
  <span id="line1334">1334.                up_down = TRUE;</span>
  <span id="line1335">1335.                  text = "updown";</span>
+
  <span id="line1335">1335.                text = "updown";</span>
  <span id="line1336">1336.              }</span>
+
  <span id="line1336">1336.            }</span>
  <span id="line1337">1337.  </span>
+
  <span id="line1337">1337. </span>
  <span id="line1338">1338.              if (status_hilites[i].behavior != BL_TH_UPDOWN) {</span>
+
  <span id="line1338">1338.            if (status_hilites[i].behavior != BL_TH_UPDOWN) {</span>
  <span id="line1339">1339.                  anything_to_s(tmp, &status_hilites[i].threshold,</span>
+
  <span id="line1339">1339.                anything_to_s(tmp, &status_hilites[i].threshold,</span>
  <span id="line1340">1340.                            blstats[0][i].anytype);</span>
+
  <span id="line1340">1340.                          blstats[0][i].anytype);</span>
  <span id="line1341">1341.                  text = tmp;</span>
+
  <span id="line1341">1341.                text = tmp;</span>
  <span id="line1342">1342.              }</span>
+
  <span id="line1342">1342.            }</span>
  <span id="line1343">1343.              k = strlen(text);</span>
+
  <span id="line1343">1343.            k = strlen(text);</span>
  <span id="line1344">1344.              if (k < (bufsiz - 1)) {</span>
+
  <span id="line1344">1344.            if (k < (bufsiz - 1)) {</span>
  <span id="line1345">1345.                  Strcat(buf, text);</span>
+
  <span id="line1345">1345.                Strcat(buf, text);</span>
  <span id="line1346">1346.                  if (val_percentage)</span>
+
  <span id="line1346">1346.                if (val_percentage)</span>
  <span id="line1347">1347.                      Strcat(buf, "%"), k++;</span>
+
  <span id="line1347">1347.                    Strcat(buf, "%"), k++;</span>
  <span id="line1348">1348.                  bufsiz -= k;</span>
+
  <span id="line1348">1348.                bufsiz -= k;</span>
  <span id="line1349">1349.              }</span>
+
  <span id="line1349">1349.            }</span>
  <span id="line1350">1350.              for (j = 0; j < 2; ++j) {</span>
+
  <span id="line1350">1350.            for (j = 0; j < 2; ++j) {</span>
  <span id="line1351">1351.                  if (bufsiz > 1) {</span>
+
  <span id="line1351">1351.                if (bufsiz > 1) {</span>
  <span id="line1352">1352.                      Strcat(buf, "/");</span>
+
  <span id="line1352">1352.                    Strcat(buf, "/");</span>
  <span id="line1353">1353.                      bufsiz--;</span>
+
  <span id="line1353">1353.                    bufsiz--;</span>
  <span id="line1354">1354.                  }</span>
+
  <span id="line1354">1354.                }</span>
  <span id="line1355">1355.                  coloridx = status_hilites[i].coloridx[j];</span>
+
  <span id="line1355">1355.                coloridx = status_hilites[i].coloridx[j];</span>
  <span id="line1356">1356.                  if (coloridx < 0) {</span>
+
  <span id="line1356">1356.                if (coloridx < 0) {</span>
  <span id="line1357">1357.                      if (coloridx == BL_HILITE_BOLD)</span>
+
  <span id="line1357">1357.                    if (coloridx == BL_HILITE_BOLD)</span>
  <span id="line1358">1358.                          text = "bold";</span>
+
  <span id="line1358">1358.                        text = "bold";</span>
  <span id="line1359">1359.                      else if (coloridx == BL_HILITE_INVERSE)</span>
+
  <span id="line1359">1359.                    else if (coloridx == BL_HILITE_INVERSE)</span>
  <span id="line1360">1360.                          text = "inverse";</span>
+
  <span id="line1360">1360.                        text = "inverse";</span>
  <span id="line1361">1361.                      else</span>
+
  <span id="line1361">1361.                    else</span>
  <span id="line1362">1362.                          text = "normal";</span>
+
  <span id="line1362">1362.                        text = "normal";</span>
  <span id="line1363">1363.                  } else {</span>
+
  <span id="line1363">1363.                } else {</span>
  <span id="line1364">1364.                      char *blank;</span>
+
  <span id="line1364">1364.                    char *blank;</span>
  <span id="line1365">1365.                      (void) strcpy(colorname, c_obj_colors[coloridx]);</span>
+
  <span id="line1365">1365.                    (void) strcpy(colorname, c_obj_colors[coloridx]);</span>
  <span id="line1366">1366.                      for (blank = index(colorname, ' '); blank;</span>
+
  <span id="line1366">1366.                    for (blank = index(colorname, ' '); blank;</span>
  <span id="line1367">1367.                          blank = index(colorname, ' '))</span>
+
  <span id="line1367">1367.                          blank = index(colorname, ' '))</span>
  <span id="line1368">1368.                          *blank = '-';</span>
+
  <span id="line1368">1368.                        *blank = '-';</span>
  <span id="line1369">1369.                      text = colorname;</span>
+
  <span id="line1369">1369.                    text = colorname;</span>
  <span id="line1370">1370.                  }</span>
+
  <span id="line1370">1370.                }</span>
  <span id="line1371">1371.                  k = strlen(text);</span>
+
  <span id="line1371">1371.                k = strlen(text);</span>
  <span id="line1372">1372.                  if (k < bufsiz) {</span>
+
  <span id="line1372">1372.                if (k < bufsiz) {</span>
  <span id="line1373">1373.                      Strcat(buf, text);</span>
+
  <span id="line1373">1373.                    Strcat(buf, text);</span>
  <span id="line1374">1374.                      bufsiz -= k;</span>
+
  <span id="line1374">1374.                    bufsiz -= k;</span>
  <span id="line1375">1375.                  }</span>
+
  <span id="line1375">1375.                }</span>
  <span id="line1376">1376.              }</span>
+
  <span id="line1376">1376.            }</span>
  <span id="line1377">1377.          }</span>
+
  <span id="line1377">1377.        }</span>
  <span id="line1378">1378.      }</span>
+
  <span id="line1378">1378.    }</span>
  <span id="line1379">1379.      return buf;</span>
+
  <span id="line1379">1379.    return buf;</span>
  <span id="line1380">1380.  }</span>
+
  <span id="line1380">1380. }</span>
  <span id="line1381">1381.  </span>
+
  <span id="line1381">1381. </span>
  
 
=== clridx_to_s ===
 
=== clridx_to_s ===
 
 
  <span id="line1382">1382.  STATIC_OVL const char *</span>
+
  <span id="line1382">1382. STATIC_OVL const char *</span>
  <span id="line1383">1383.  clridx_to_s(buf, idx)</span>
+
  <span id="line1383">1383. clridx_to_s(buf, idx)</span>
  <span id="line1384">1384.  char *buf;</span>
+
  <span id="line1384">1384. char *buf;</span>
  <span id="line1385">1385.  int idx;</span>
+
  <span id="line1385">1385. int idx;</span>
  <span id="line1386">1386.  {</span>
+
  <span id="line1386">1386. {</span>
  <span id="line1387">1387.      static const char *a[] = { "bold", "inverse", "normal" };</span>
+
  <span id="line1387">1387.    static const char *a[] = { "bold", "inverse", "normal" };</span>
  <span id="line1388">1388.      char* p = 0;</span>
+
  <span id="line1388">1388.    char* p = 0;</span>
  <span id="line1389">1389.  </span>
+
  <span id="line1389">1389. </span>
  <span id="line1390">1390.      if (buf) {</span>
+
  <span id="line1390">1390.    if (buf) {</span>
  <span id="line1391">1391.          buf[0] = '\0';</span>
+
  <span id="line1391">1391.        buf[0] = '\0';</span>
  <span id="line1392">1392.          if (idx < 0 && idx >= BL_HILITE_BOLD)</span>
+
  <span id="line1392">1392.        if (idx < 0 && idx >= BL_HILITE_BOLD)</span>
  <span id="line1393">1393.              Strcpy(buf, a[idx + 3]);</span>
+
  <span id="line1393">1393.            Strcpy(buf, a[idx + 3]);</span>
  <span id="line1394">1394.          else if (idx >= 0 && idx < CLR_MAX)</span>
+
  <span id="line1394">1394.        else if (idx >= 0 && idx < CLR_MAX)</span>
  <span id="line1395">1395.              Strcpy(buf, c_obj_colors[idx]);</span>
+
  <span id="line1395">1395.            Strcpy(buf, c_obj_colors[idx]);</span>
  <span id="line1396">1396.          /* replace spaces with - */</span>
+
  <span id="line1396">1396.        /* replace spaces with - */</span>
  <span id="line1397">1397.          for(p = buf; *p; p++)</span>
+
  <span id="line1397">1397.        for(p = buf; *p; p++)</span>
  <span id="line1398">1398.              if(*p == ' ') *p = '-';</span>
+
  <span id="line1398">1398.            if(*p == ' ') *p = '-';</span>
  <span id="line1399">1399.      }</span>
+
  <span id="line1399">1399.    }</span>
  <span id="line1400">1400.      return buf;</span>
+
  <span id="line1400">1400.    return buf;</span>
  <span id="line1401">1401.  }</span>
+
  <span id="line1401">1401. }</span>
  <span id="line1402">1402.  </span>
+
  <span id="line1402">1402. </span>
  
 
=== status_hilite_menu ===
 
=== status_hilite_menu ===
 
 
  <span id="line1403">1403.  boolean</span>
+
  <span id="line1403">1403. boolean</span>
  <span id="line1404">1404.  status_hilite_menu()</span>
+
  <span id="line1404">1404. status_hilite_menu()</span>
  <span id="line1405">1405.  {</span>
+
  <span id="line1405">1405. {</span>
  <span id="line1406">1406.      int i, j, k, pick_cnt, pick_idx, opt_idx;</span>
+
  <span id="line1406">1406.    int i, j, k, pick_cnt, pick_idx, opt_idx;</span>
  <span id="line1407">1407.      menu_item *statfield_picks = (menu_item *) 0;</span>
+
  <span id="line1407">1407.    menu_item *statfield_picks = (menu_item *) 0;</span>
  <span id="line1408">1408.      const char *fieldname;</span>
+
  <span id="line1408">1408.    const char *fieldname;</span>
  <span id="line1409">1409.      int field_picks[MAXBLSTATS], res;</span>
+
  <span id="line1409">1409.    int field_picks[MAXBLSTATS], res;</span>
  <span id="line1410">1410.      struct hilite_s hltemp[MAXBLSTATS];</span>
+
  <span id="line1410">1410.    struct hilite_s hltemp[MAXBLSTATS];</span>
  <span id="line1411">1411.      char buf[BUFSZ], thresholdbuf[BUFSZ], below[BUFSZ], above[BUFSZ];</span>
+
  <span id="line1411">1411.    char buf[BUFSZ], thresholdbuf[BUFSZ], below[BUFSZ], above[BUFSZ];</span>
  <span id="line1412">1412.      winid tmpwin;</span>
+
  <span id="line1412">1412.    winid tmpwin;</span>
  <span id="line1413">1413.      anything any;</span>
+
  <span id="line1413">1413.    anything any;</span>
  <span id="line1414">1414.  </span>
+
  <span id="line1414">1414. </span>
  <span id="line1415">1415.      tmpwin = create_nhwindow(NHW_MENU);</span>
+
  <span id="line1415">1415.    tmpwin = create_nhwindow(NHW_MENU);</span>
  <span id="line1416">1416.      start_menu(tmpwin);</span>
+
  <span id="line1416">1416.    start_menu(tmpwin);</span>
  <span id="line1417">1417.      for (i = 0; i < MAXBLSTATS; i++) {</span>
+
  <span id="line1417">1417.    for (i = 0; i < MAXBLSTATS; i++) {</span>
  <span id="line1418">1418.          (void) memset(&hltemp[i], 0, sizeof(struct hilite_s));</span>
+
  <span id="line1418">1418.        (void) memset(&hltemp[i], 0, sizeof(struct hilite_s));</span>
  <span id="line1419">1419.          fieldname = fieldids[i].fieldname;</span>
+
  <span id="line1419">1419.        fieldname = fieldids[i].fieldname;</span>
  <span id="line1420">1420.          any.a_int = i + 1;</span>
+
  <span id="line1420">1420.        any.a_int = i + 1;</span>
  <span id="line1421">1421.          add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, fieldname,</span>
+
  <span id="line1421">1421.        add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, fieldname,</span>
  <span id="line1422">1422.                  MENU_UNSELECTED);</span>
+
  <span id="line1422">1422.                  MENU_UNSELECTED);</span>
  <span id="line1423">1423.          field_picks[i] = 0;</span>
+
  <span id="line1423">1423.        field_picks[i] = 0;</span>
  <span id="line1424">1424.      }</span>
+
  <span id="line1424">1424.    }</span>
  <span id="line1425">1425.      end_menu(tmpwin, "Change hilite on which status field(s):");</span>
+
  <span id="line1425">1425.    end_menu(tmpwin, "Change hilite on which status field(s):");</span>
  <span id="line1426">1426.      if ((pick_cnt = select_menu(tmpwin, PICK_ANY, &statfield_picks)) > 0) {</span>
+
  <span id="line1426">1426.    if ((pick_cnt = select_menu(tmpwin, PICK_ANY, &statfield_picks)) > 0) {</span>
  <span id="line1427">1427.          for (pick_idx = 0; pick_idx < pick_cnt; ++pick_idx) {</span>
+
  <span id="line1427">1427.        for (pick_idx = 0; pick_idx < pick_cnt; ++pick_idx) {</span>
  <span id="line1428">1428.              opt_idx = statfield_picks[pick_idx].item.a_int - 1;</span>
+
  <span id="line1428">1428.            opt_idx = statfield_picks[pick_idx].item.a_int - 1;</span>
  <span id="line1429">1429.              field_picks[opt_idx] = 1;</span>
+
  <span id="line1429">1429.            field_picks[opt_idx] = 1;</span>
  <span id="line1430">1430.          }</span>
+
  <span id="line1430">1430.        }</span>
  <span id="line1431">1431.          free((genericptr_t) statfield_picks);</span>
+
  <span id="line1431">1431.        free((genericptr_t) statfield_picks);</span>
  <span id="line1432">1432.          statfield_picks = (menu_item *) 0;</span>
+
  <span id="line1432">1432.        statfield_picks = (menu_item *) 0;</span>
  <span id="line1433">1433.      }</span>
+
  <span id="line1433">1433.    }</span>
  <span id="line1434">1434.      destroy_nhwindow(tmpwin);</span>
+
  <span id="line1434">1434.    destroy_nhwindow(tmpwin);</span>
  <span id="line1435">1435.      if (pick_cnt < 0)</span>
+
  <span id="line1435">1435.    if (pick_cnt < 0)</span>
  <span id="line1436">1436.          return FALSE;</span>
+
  <span id="line1436">1436.        return FALSE;</span>
  <span id="line1437">1437.  </span>
+
  <span id="line1437">1437. </span>
  <span id="line1438">1438.      for (i = 0; i < MAXBLSTATS; i++) {</span>
+
  <span id="line1438">1438.    for (i = 0; i < MAXBLSTATS; i++) {</span>
  <span id="line1439">1439.          if (field_picks[i]) {</span>
+
  <span id="line1439">1439.        if (field_picks[i]) {</span>
  <span id="line1440">1440.              menu_item *pick = (menu_item *) 0;</span>
+
  <span id="line1440">1440.            menu_item *pick = (menu_item *) 0;</span>
  <span id="line1441">1441.              Sprintf(buf, "Threshold behavior options for %s:",</span>
+
  <span id="line1441">1441.            Sprintf(buf, "Threshold behavior options for %s:",</span>
  <span id="line1442">1442.                      fieldids[i].fieldname);</span>
+
  <span id="line1442">1442.                    fieldids[i].fieldname);</span>
  <span id="line1443">1443.              tmpwin = create_nhwindow(NHW_MENU);</span>
+
  <span id="line1443">1443.            tmpwin = create_nhwindow(NHW_MENU);</span>
  <span id="line1444">1444.              start_menu(tmpwin);</span>
+
  <span id="line1444">1444.            start_menu(tmpwin);</span>
  <span id="line1445">1445.              if (i == BL_CONDITION) {</span>
+
  <span id="line1445">1445.            if (i == BL_CONDITION) {</span>
  <span id="line1446">1446.                  any = zeroany;</span>
+
  <span id="line1446">1446.                any = zeroany;</span>
  <span id="line1447">1447.                  any.a_int = BL_TH_CONDITION + 1;</span>
+
  <span id="line1447">1447.                any.a_int = BL_TH_CONDITION + 1;</span>
  <span id="line1448">1448.                  add_menu(tmpwin, NO_GLYPH, &any, 'c', 0, ATR_NONE,</span>
+
  <span id="line1448">1448.                add_menu(tmpwin, NO_GLYPH, &any, 'c', 0, ATR_NONE,</span>
  <span id="line1449">1449.                          "Condition bitmask threshold.", MENU_UNSELECTED);</span>
+
  <span id="line1449">1449.                          "Condition bitmask threshold.", MENU_UNSELECTED);</span>
  <span id="line1450">1450.              }</span>
+
  <span id="line1450">1450.            }</span>
  <span id="line1451">1451.              any = zeroany;</span>
+
  <span id="line1451">1451.            any = zeroany;</span>
  <span id="line1452">1452.              any.a_int = BL_TH_NONE + 1;</span>
+
  <span id="line1452">1452.            any.a_int = BL_TH_NONE + 1;</span>
  <span id="line1453">1453.              add_menu(tmpwin, NO_GLYPH, &any, 'n', 0, ATR_NONE, "None",</span>
+
  <span id="line1453">1453.            add_menu(tmpwin, NO_GLYPH, &any, 'n', 0, ATR_NONE, "None",</span>
  <span id="line1454">1454.                      MENU_UNSELECTED);</span>
+
  <span id="line1454">1454.                      MENU_UNSELECTED);</span>
  <span id="line1455">1455.              if (i != BL_CONDITION) {</span>
+
  <span id="line1455">1455.            if (i != BL_CONDITION) {</span>
  <span id="line1456">1456.                  if (blstats[0][i].idxmax > 0) {</span>
+
  <span id="line1456">1456.                if (blstats[0][i].idxmax > 0) {</span>
  <span id="line1457">1457.                      any = zeroany;</span>
+
  <span id="line1457">1457.                    any = zeroany;</span>
  <span id="line1458">1458.                      any.a_int = BL_TH_VAL_PERCENTAGE + 1;</span>
+
  <span id="line1458">1458.                    any.a_int = BL_TH_VAL_PERCENTAGE + 1;</span>
  <span id="line1459">1459.                      add_menu(tmpwin, NO_GLYPH, &any, 'p', 0, ATR_NONE,</span>
+
  <span id="line1459">1459.                    add_menu(tmpwin, NO_GLYPH, &any, 'p', 0, ATR_NONE,</span>
  <span id="line1460">1460.                              "Percentage threshold.", MENU_UNSELECTED);</span>
+
  <span id="line1460">1460.                              "Percentage threshold.", MENU_UNSELECTED);</span>
  <span id="line1461">1461.                  }</span>
+
  <span id="line1461">1461.                }</span>
  <span id="line1462">1462.                  any = zeroany;</span>
+
  <span id="line1462">1462.                any = zeroany;</span>
  <span id="line1463">1463.                  any.a_int = BL_TH_UPDOWN + 1;</span>
+
  <span id="line1463">1463.                any.a_int = BL_TH_UPDOWN + 1;</span>
  <span id="line1464">1464.                  add_menu(tmpwin, NO_GLYPH, &any, 'u', 0, ATR_NONE,</span>
+
  <span id="line1464">1464.                add_menu(tmpwin, NO_GLYPH, &any, 'u', 0, ATR_NONE,</span>
  <span id="line1465">1465.                          "UpDown threshold.", MENU_UNSELECTED);</span>
+
  <span id="line1465">1465.                          "UpDown threshold.", MENU_UNSELECTED);</span>
  <span id="line1466">1466.                  any = zeroany;</span>
+
  <span id="line1466">1466.                any = zeroany;</span>
  <span id="line1467">1467.                  any.a_int = BL_TH_VAL_ABSOLUTE + 1;</span>
+
  <span id="line1467">1467.                any.a_int = BL_TH_VAL_ABSOLUTE + 1;</span>
  <span id="line1468">1468.                  add_menu(tmpwin, NO_GLYPH, &any, 'v', 0, ATR_NONE,</span>
+
  <span id="line1468">1468.                add_menu(tmpwin, NO_GLYPH, &any, 'v', 0, ATR_NONE,</span>
  <span id="line1469">1469.                          "Value threshold.", MENU_UNSELECTED);</span>
+
  <span id="line1469">1469.                          "Value threshold.", MENU_UNSELECTED);</span>
  <span id="line1470">1470.              }</span>
+
  <span id="line1470">1470.            }</span>
  <span id="line1471">1471.              end_menu(tmpwin, buf);</span>
+
  <span id="line1471">1471.            end_menu(tmpwin, buf);</span>
  <span id="line1472">1472.              if ((res = select_menu(tmpwin, PICK_ONE, &pick)) > 0) {</span>
+
  <span id="line1472">1472.            if ((res = select_menu(tmpwin, PICK_ONE, &pick)) > 0) {</span>
  <span id="line1473">1473.                  hltemp[i].behavior = pick->item.a_int - 1;</span>
+
  <span id="line1473">1473.                hltemp[i].behavior = pick->item.a_int - 1;</span>
  <span id="line1474">1474.                  free((genericptr_t) pick);</span>
+
  <span id="line1474">1474.                free((genericptr_t) pick);</span>
  <span id="line1475">1475.              }</span>
+
  <span id="line1475">1475.            }</span>
  <span id="line1476">1476.              destroy_nhwindow(tmpwin);</span>
+
  <span id="line1476">1476.            destroy_nhwindow(tmpwin);</span>
  <span id="line1477">1477.              if (res < 0)</span>
+
  <span id="line1477">1477.            if (res < 0)</span>
  <span id="line1478">1478.                  return FALSE;</span>
+
  <span id="line1478">1478.                return FALSE;</span>
  <span id="line1479">1479.  </span>
+
  <span id="line1479">1479. </span>
  <span id="line1480">1480.              if (hltemp[i].behavior == BL_TH_UPDOWN) {</span>
+
  <span id="line1480">1480.            if (hltemp[i].behavior == BL_TH_UPDOWN) {</span>
  <span id="line1481">1481.                  Sprintf(below, "%s decreases", fieldids[i].fieldname);</span>
+
  <span id="line1481">1481.                Sprintf(below, "%s decreases", fieldids[i].fieldname);</span>
  <span id="line1482">1482.                  Sprintf(above, "%s increases", fieldids[i].fieldname);</span>
+
  <span id="line1482">1482.                Sprintf(above, "%s increases", fieldids[i].fieldname);</span>
  <span id="line1483">1483.              } else if (hltemp[i].behavior) {</span>
+
  <span id="line1483">1483.            } else if (hltemp[i].behavior) {</span>
  <span id="line1484">1484.                  /* Have them enter the threshold*/</span>
+
  <span id="line1484">1484.                /* Have them enter the threshold*/</span>
  <span id="line1485">1485.                  Sprintf(</span>
+
  <span id="line1485">1485.                Sprintf(</span>
  <span id="line1486">1486.                      buf, "Set %s threshold to what%s?", fieldids[i].fieldname,</span>
+
  <span id="line1486">1486.                    buf, "Set %s threshold to what%s?", fieldids[i].fieldname,</span>
  <span id="line1487">1487.                      (hltemp[i].behavior == BL_TH_VAL_PERCENTAGE)</span>
+
  <span id="line1487">1487.                    (hltemp[i].behavior == BL_TH_VAL_PERCENTAGE)</span>
  <span id="line1488">1488.                          ? " percentage"</span>
+
  <span id="line1488">1488.                        ? " percentage"</span>
  <span id="line1489">1489.                          : (hltemp[i].behavior == BL_TH_CONDITION) ? " mask"</span>
+
  <span id="line1489">1489.                        : (hltemp[i].behavior == BL_TH_CONDITION) ? " mask"</span>
  <span id="line1490">1490.                                                                    : "");</span>
+
  <span id="line1490">1490.                                                                  : "");</span>
  <span id="line1491">1491.                  getlin(buf, thresholdbuf);</span>
+
  <span id="line1491">1491.                getlin(buf, thresholdbuf);</span>
  <span id="line1492">1492.                  if (thresholdbuf[0] == '\033')</span>
+
  <span id="line1492">1492.                if (thresholdbuf[0] == '\033')</span>
  <span id="line1493">1493.                      return FALSE;</span>
+
  <span id="line1493">1493.                    return FALSE;</span>
  <span id="line1494">1494.                  (void) s_to_anything(&hltemp[i].threshold, thresholdbuf,</span>
+
  <span id="line1494">1494.                (void) s_to_anything(&hltemp[i].threshold, thresholdbuf,</span>
  <span id="line1495">1495.                                      blstats[0][i].anytype);</span>
+
  <span id="line1495">1495.                                      blstats[0][i].anytype);</span>
  <span id="line1496">1496.                  if (!hltemp[i].threshold.a_void)</span>
+
  <span id="line1496">1496.                if (!hltemp[i].threshold.a_void)</span>
  <span id="line1497">1497.                      return FALSE;</span>
+
  <span id="line1497">1497.                    return FALSE;</span>
  <span id="line1498">1498.  </span>
+
  <span id="line1498">1498. </span>
  <span id="line1499">1499.                  Sprintf(below, "%s falls below %s%s", fieldids[i].fieldname,</span>
+
  <span id="line1499">1499.                Sprintf(below, "%s falls below %s%s", fieldids[i].fieldname,</span>
  <span id="line1500">1500.                          thresholdbuf,</span>
+
  <span id="line1500">1500.                        thresholdbuf,</span>
  <span id="line1501">1501.                          (hltemp[i].behavior == BL_TH_VAL_PERCENTAGE) ? "%"</span>
+
  <span id="line1501">1501.                        (hltemp[i].behavior == BL_TH_VAL_PERCENTAGE) ? "%"</span>
  <span id="line1502">1502.                                                                      : "");</span>
+
  <span id="line1502">1502.                                                                      : "");</span>
  <span id="line1503">1503.                  Sprintf(above, "%s rises above %s%s", fieldids[i].fieldname,</span>
+
  <span id="line1503">1503.                Sprintf(above, "%s rises above %s%s", fieldids[i].fieldname,</span>
  <span id="line1504">1504.                          thresholdbuf,</span>
+
  <span id="line1504">1504.                        thresholdbuf,</span>
  <span id="line1505">1505.                          (hltemp[i].behavior == BL_TH_VAL_PERCENTAGE) ? "%"</span>
+
  <span id="line1505">1505.                        (hltemp[i].behavior == BL_TH_VAL_PERCENTAGE) ? "%"</span>
  <span id="line1506">1506.                                                                      : "");</span>
+
  <span id="line1506">1506.                                                                      : "");</span>
  <span id="line1507">1507.              }</span>
+
  <span id="line1507">1507.            }</span>
  <span id="line1508">1508.              for (j = 0; j < 2 && (hltemp[i].behavior != BL_TH_NONE); ++j) {</span>
+
  <span id="line1508">1508.            for (j = 0; j < 2 && (hltemp[i].behavior != BL_TH_NONE); ++j) {</span>
  <span id="line1509">1509.                  char prompt[QBUFSZ];</span>
+
  <span id="line1509">1509.                char prompt[QBUFSZ];</span>
  <span id="line1510">1510.                  /* j == 0 below, j == 1 above */</span>
+
  <span id="line1510">1510.                /* j == 0 below, j == 1 above */</span>
  <span id="line1511">1511.                  menu_item *pick2 = (menu_item *) 0;</span>
+
  <span id="line1511">1511.                menu_item *pick2 = (menu_item *) 0;</span>
  <span id="line1512">1512.  </span>
+
  <span id="line1512">1512. </span>
  <span id="line1513">1513.                  Sprintf(prompt, "Display how when %s?", j ? above : below);</span>
+
  <span id="line1513">1513.                Sprintf(prompt, "Display how when %s?", j ? above : below);</span>
  <span id="line1514">1514.                  tmpwin = create_nhwindow(NHW_MENU);</span>
+
  <span id="line1514">1514.                tmpwin = create_nhwindow(NHW_MENU);</span>
  <span id="line1515">1515.                  start_menu(tmpwin);</span>
+
  <span id="line1515">1515.                start_menu(tmpwin);</span>
  <span id="line1516">1516.                  for (k = -3; k < CLR_MAX; ++k) {</span>
+
  <span id="line1516">1516.                for (k = -3; k < CLR_MAX; ++k) {</span>
  <span id="line1517">1517.                      /* if (k == -1) continue; */</span>
+
  <span id="line1517">1517.                    /* if (k == -1) continue; */</span>
  <span id="line1518">1518.                      any = zeroany;</span>
+
  <span id="line1518">1518.                    any = zeroany;</span>
  <span id="line1519">1519.                      any.a_int = (k >= 0) ? k + 1 : k;</span>
+
  <span id="line1519">1519.                    any.a_int = (k >= 0) ? k + 1 : k;</span>
  <span id="line1520">1520.                      if (k > 0)</span>
+
  <span id="line1520">1520.                    if (k > 0)</span>
  <span id="line1521">1521.                          add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,</span>
+
  <span id="line1521">1521.                        add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,</span>
  <span id="line1522">1522.                                  c_obj_colors[k], MENU_UNSELECTED);</span>
+
  <span id="line1522">1522.                                  c_obj_colors[k], MENU_UNSELECTED);</span>
  <span id="line1523">1523.                      else if (k == -1)</span>
+
  <span id="line1523">1523.                    else if (k == -1)</span>
  <span id="line1524">1524.                          add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,</span>
+
  <span id="line1524">1524.                        add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,</span>
  <span id="line1525">1525.                                  "normal", MENU_UNSELECTED);</span>
+
  <span id="line1525">1525.                                  "normal", MENU_UNSELECTED);</span>
  <span id="line1526">1526.                      else if (k == -2)</span>
+
  <span id="line1526">1526.                    else if (k == -2)</span>
  <span id="line1527">1527.                          add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,</span>
+
  <span id="line1527">1527.                        add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,</span>
  <span id="line1528">1528.                                  "inverse", MENU_UNSELECTED);</span>
+
  <span id="line1528">1528.                                  "inverse", MENU_UNSELECTED);</span>
  <span id="line1529">1529.                      else if (k == -3)</span>
+
  <span id="line1529">1529.                    else if (k == -3)</span>
  <span id="line1530">1530.                          add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,</span>
+
  <span id="line1530">1530.                        add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,</span>
  <span id="line1531">1531.                                  "bold", MENU_UNSELECTED);</span>
+
  <span id="line1531">1531.                                  "bold", MENU_UNSELECTED);</span>
  <span id="line1532">1532.                  }</span>
+
  <span id="line1532">1532.                }</span>
  <span id="line1533">1533.                  end_menu(tmpwin, prompt);</span>
+
  <span id="line1533">1533.                end_menu(tmpwin, prompt);</span>
  <span id="line1534">1534.                  if ((res = select_menu(tmpwin, PICK_ONE, &pick2)) > 0) {</span>
+
  <span id="line1534">1534.                if ((res = select_menu(tmpwin, PICK_ONE, &pick2)) > 0) {</span>
  <span id="line1535">1535.                      hltemp[i].coloridx[j] = (pick2->item.a_char > 0)</span>
+
  <span id="line1535">1535.                    hltemp[i].coloridx[j] = (pick2->item.a_char > 0)</span>
  <span id="line1536">1536.                                                  ? pick2->item.a_int - 1</span>
+
  <span id="line1536">1536.                                                ? pick2->item.a_int - 1</span>
  <span id="line1537">1537.                                                  : pick2->item.a_int;</span>
+
  <span id="line1537">1537.                                                : pick2->item.a_int;</span>
  <span id="line1538">1538.                      free((genericptr_t) pick2);</span>
+
  <span id="line1538">1538.                    free((genericptr_t) pick2);</span>
  <span id="line1539">1539.                  }</span>
+
  <span id="line1539">1539.                }</span>
  <span id="line1540">1540.                  destroy_nhwindow(tmpwin);</span>
+
  <span id="line1540">1540.                destroy_nhwindow(tmpwin);</span>
  <span id="line1541">1541.                  if (res < 0)</span>
+
  <span id="line1541">1541.                if (res < 0)</span>
  <span id="line1542">1542.                      return FALSE;</span>
+
  <span id="line1542">1542.                    return FALSE;</span>
  <span id="line1543">1543.              }</span>
+
  <span id="line1543">1543.            }</span>
  <span id="line1544">1544.          }</span>
+
  <span id="line1544">1544.        }</span>
  <span id="line1545">1545.      }</span>
+
  <span id="line1545">1545.    }</span>
  <span id="line1546">1546.      buf[0] = '\0';</span>
+
  <span id="line1546">1546.    buf[0] = '\0';</span>
  <span id="line1547">1547.      for (i = 0; i < MAXBLSTATS; i++) {</span>
+
  <span id="line1547">1547.    for (i = 0; i < MAXBLSTATS; i++) {</span>
  <span id="line1548">1548.          if (field_picks[i]) {</span>
+
  <span id="line1548">1548.        if (field_picks[i]) {</span>
  <span id="line1549">1549.              Sprintf(eos(buf), "%s/%s%s/", fieldids[i].fieldname,</span>
+
  <span id="line1549">1549.            Sprintf(eos(buf), "%s/%s%s/", fieldids[i].fieldname,</span>
  <span id="line1550">1550.                      (hltemp[i].behavior == BL_TH_UPDOWN)</span>
+
  <span id="line1550">1550.                    (hltemp[i].behavior == BL_TH_UPDOWN)</span>
  <span id="line1551">1551.                          ? "updown"</span>
+
  <span id="line1551">1551.                        ? "updown"</span>
  <span id="line1552">1552.                          : anything_to_s(thresholdbuf, &hltemp[i].threshold,</span>
+
  <span id="line1552">1552.                        : anything_to_s(thresholdbuf, &hltemp[i].threshold,</span>
  <span id="line1553">1553.                                          blstats[0][i].anytype),</span>
+
  <span id="line1553">1553.                                        blstats[0][i].anytype),</span>
  <span id="line1554">1554.                      (hltemp[i].behavior == BL_TH_VAL_PERCENTAGE) ? "%" : "");</span>
+
  <span id="line1554">1554.                    (hltemp[i].behavior == BL_TH_VAL_PERCENTAGE) ? "%" : "");</span>
  <span id="line1555">1555.              /* borrow thresholdbuf for use with these last two */</span>
+
  <span id="line1555">1555.            /* borrow thresholdbuf for use with these last two */</span>
  <span id="line1556">1556.              Sprintf(eos(buf), "%s/",</span>
+
  <span id="line1556">1556.            Sprintf(eos(buf), "%s/",</span>
  <span id="line1557">1557.                      clridx_to_s(thresholdbuf, hltemp[i].coloridx[0]));</span>
+
  <span id="line1557">1557.                    clridx_to_s(thresholdbuf, hltemp[i].coloridx[0]));</span>
  <span id="line1558">1558.              Sprintf(eos(buf), "%s ",</span>
+
  <span id="line1558">1558.            Sprintf(eos(buf), "%s ",</span>
  <span id="line1559">1559.                      clridx_to_s(thresholdbuf, hltemp[i].coloridx[1]));</span>
+
  <span id="line1559">1559.                    clridx_to_s(thresholdbuf, hltemp[i].coloridx[1]));</span>
  <span id="line1560">1560.          }</span>
+
  <span id="line1560">1560.        }</span>
  <span id="line1561">1561.      }</span>
+
  <span id="line1561">1561.    }</span>
  <span id="line1562">1562.      return set_status_hilites(buf, FALSE);</span>
+
  <span id="line1562">1562.    return set_status_hilites(buf, FALSE);</span>
  <span id="line1563">1563.  }</span>
+
  <span id="line1563">1563. }</span>
  <span id="line1564">1564.  #endif /*STATUS_HILITES*/</span>
+
  <span id="line1564">1564. #endif /*STATUS_HILITES*/</span>
  <span id="line1565">1565.  #endif /*STATUS_VIA_WINDOWPORT*/</span>
+
  <span id="line1565">1565. #endif /*STATUS_VIA_WINDOWPORT*/</span>
  <span id="line1566">1566.  </span>
+
  <span id="line1566">1566. </span>
  <span id="line1567">1567.  /*botl.c*/</span>
+
  <span id="line1567">1567. /*botl.c*/</span>
 
[[Category:NetHack 3.6.0 source code|src/botl.c]]
 
[[Category:NetHack 3.6.0 source code|src/botl.c]]

Latest revision as of 14:06, 15 December 2015

Below is the full text to botl.c from the source code of NetHack 3.6.0. To link to a particular line, write [[Source:NetHack 3.6.0/src/botl.c#line123]], for example.

The NetHack General Public License applies to screenshots, source code and other content from NetHack.

This content was modified from the original NetHack source code distribution (by splitting up NetHack content between wiki pages, and possibly further editing). See the page history for a list of who changed it, and on what dates.

Top of file

 /* NetHack 3.6	botl.c	$NHDT-Date: 1447978683 2015/11/20 00:18:03 $  $NHDT-Branch: master $:$NHDT-Revision: 1.69 $ */
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
 #include "hack.h"
 #include <limits.h>
 
 extern const char *hu_stat[]; /* defined in eat.c */
 
 const char *const enc_stat[] = { "",         "Burdened",  "Stressed",
                                  "Strained", "Overtaxed", "Overloaded" };
 
 STATIC_OVL NEARDATA int mrank_sz = 0; /* loaded by max_rank_sz (from u_init) */
 STATIC_DCL const char *NDECL(rank);
 

Status not via windowport

 #ifndef STATUS_VIA_WINDOWPORT
 
 STATIC_DCL void NDECL(bot1);
 STATIC_DCL void NDECL(bot2);
 

bot1

 STATIC_OVL void
 bot1()
 {
     char newbot1[MAXCO];
     register char *nb;
     register int i, j;
 
     Strcpy(newbot1, plname);
     if ('a' <= newbot1[0] && newbot1[0] <= 'z')
         newbot1[0] += 'A' - 'a';
     newbot1[10] = 0;
     Sprintf(nb = eos(newbot1), " the ");
 
     if (Upolyd) {
         char mbot[BUFSZ];
         int k = 0;
 
         Strcpy(mbot, mons[u.umonnum].mname);
         while (mbot[k] != 0) {
             if ((k == 0 || (k > 0 && mbot[k - 1] == ' ')) && 'a' <= mbot[k]
                 && mbot[k] <= 'z')
                 mbot[k] += 'A' - 'a';
             k++;
         }
         Strcpy(nb = eos(nb), mbot);
     } else
         Strcpy(nb = eos(nb), rank());
 
     Sprintf(nb = eos(nb), "  ");
     i = mrank_sz + 15;
     j = (int) ((nb + 2) - newbot1); /* strlen(newbot1) but less computation */
     if ((i - j) > 0)
         Sprintf(nb = eos(nb), "%*s", i - j, " "); /* pad with spaces */
     if (ACURR(A_STR) > 18) {
         if (ACURR(A_STR) > STR18(100))
             Sprintf(nb = eos(nb), "St:%2d ", ACURR(A_STR) - 100);
         else if (ACURR(A_STR) < STR18(100))
             Sprintf(nb = eos(nb), "St:18/%02d ", ACURR(A_STR) - 18);
         else
             Sprintf(nb = eos(nb), "St:18/** ");
     } else
         Sprintf(nb = eos(nb), "St:%-1d ", ACURR(A_STR));
     Sprintf(nb = eos(nb), "Dx:%-1d Co:%-1d In:%-1d Wi:%-1d Ch:%-1d",
             ACURR(A_DEX), ACURR(A_CON), ACURR(A_INT), ACURR(A_WIS),
             ACURR(A_CHA));
     Sprintf(nb = eos(nb),
             (u.ualign.type == A_CHAOTIC)
                 ? "  Chaotic"
                 : (u.ualign.type == A_NEUTRAL) ? "  Neutral" : "  Lawful");
 #ifdef SCORE_ON_BOTL
     if (flags.showscore)
         Sprintf(nb = eos(nb), " S:%ld", botl_score());
 #endif
     curs(WIN_STATUS, 1, 0);
     putstr(WIN_STATUS, 0, newbot1);
 }
 

bot2

 STATIC_OVL void
 bot2()
 {
     char newbot2[MAXCO];
     register char *nb;
     int hp, hpmax;
     int cap = near_capacity();
 
     hp = Upolyd ? u.mh : u.uhp;
     hpmax = Upolyd ? u.mhmax : u.uhpmax;
 
     if (hp < 0)
         hp = 0;
     (void) describe_level(newbot2);
     Sprintf(nb = eos(newbot2), "%s:%-2ld HP:%d(%d) Pw:%d(%d) AC:%-2d",
             encglyph(objnum_to_glyph(GOLD_PIECE)), money_cnt(invent), hp,
             hpmax, u.uen, u.uenmax, u.uac);
 
     if (Upolyd)
         Sprintf(nb = eos(nb), " HD:%d", mons[u.umonnum].mlevel);
     else if (flags.showexp)
         Sprintf(nb = eos(nb), " Xp:%u/%-1ld", u.ulevel, u.uexp);
     else
         Sprintf(nb = eos(nb), " Exp:%u", u.ulevel);
 
     if (flags.time)
         Sprintf(nb = eos(nb), " T:%ld", moves);
     if (strcmp(hu_stat[u.uhs], "        ")) {
         Sprintf(nb = eos(nb), " ");
         Strcat(newbot2, hu_stat[u.uhs]);
     }
     if (Confusion)
         Sprintf(nb = eos(nb), " Conf");
     if (Sick) {
         if (u.usick_type & SICK_VOMITABLE)
             Sprintf(nb = eos(nb), " FoodPois");
         if (u.usick_type & SICK_NONVOMITABLE)
             Sprintf(nb = eos(nb), " Ill");
     }
     if (Blind)
         Sprintf(nb = eos(nb), " Blind");
     if (Stunned)
         Sprintf(nb = eos(nb), " Stun");
     if (Hallucination)
         Sprintf(nb = eos(nb), " Hallu");
     if (Slimed)
         Sprintf(nb = eos(nb), " Slime");
     if (cap > UNENCUMBERED)
         Sprintf(nb = eos(nb), " %s", enc_stat[cap]);
     curs(WIN_STATUS, 1, 1);
     putmixed(WIN_STATUS, 0, newbot2);
 }
 

bot

 void
 bot()
 {
     if (youmonst.data) {
         bot1();
         bot2();
     }
     context.botl = context.botlx = 0;
 }
 
 #endif /* !STATUS_VIA_WINDOWPORT */
 

Status via all outputs

xlev_to_rank

 /* convert experience level (1..30) to rank index (0..8) */
 int
 xlev_to_rank(xlev)
 int xlev;
 {
     return (xlev <= 2) ? 0 : (xlev <= 30) ? ((xlev + 2) / 4) : 8;
 }
 

rank_to_xlev

 #if 0 /* not currently needed */
 /* convert rank index (0..8) to experience level (1..30) */
 int
 rank_to_xlev(rank)
 int rank;
 {
     return (rank <= 0) ? 1 : (rank <= 8) ? ((rank * 4) - 2) : 30;
 }
 #endif
 

rank_of

 const char *
 rank_of(lev, monnum, female)
 int lev;
 short monnum;
 boolean female;
 {
     register const struct Role *role;
     register int i;
 
     /* Find the role */
     for (role = roles; role->name.m; role++)
         if (monnum == role->malenum || monnum == role->femalenum)
             break;
     if (!role->name.m)
         role = &urole;
 
     /* Find the rank */
     for (i = xlev_to_rank((int) lev); i >= 0; i--) {
         if (female && role->rank[i].f)
             return role->rank[i].f;
         if (role->rank[i].m)
             return role->rank[i].m;
     }
 
     /* Try the role name, instead */
     if (female && role->name.f)
         return role->name.f;
     else if (role->name.m)
         return role->name.m;
     return "Player";
 }
 

rank

 STATIC_OVL const char *
 rank()
 {
     return rank_of(u.ulevel, Role_switch, flags.female);
 }
 

title_to_mon

 int
 title_to_mon(str, rank_indx, title_length)
 const char *str;
 int *rank_indx, *title_length;
 {
     register int i, j;
 
     /* Loop through each of the roles */
     for (i = 0; roles[i].name.m; i++)
         for (j = 0; j < 9; j++) {
             if (roles[i].rank[j].m
                 && !strncmpi(str, roles[i].rank[j].m,
                              strlen(roles[i].rank[j].m))) {
                 if (rank_indx)
                     *rank_indx = j;
                 if (title_length)
                     *title_length = strlen(roles[i].rank[j].m);
                 return roles[i].malenum;
             }
             if (roles[i].rank[j].f
                 && !strncmpi(str, roles[i].rank[j].f,
                              strlen(roles[i].rank[j].f))) {
                 if (rank_indx)
                     *rank_indx = j;
                 if (title_length)
                     *title_length = strlen(roles[i].rank[j].f);
                 return (roles[i].femalenum != NON_PM) ? roles[i].femalenum
                                                       : roles[i].malenum;
             }
         }
     return NON_PM;
 }
 

max_rank_sz

 void
 max_rank_sz()
 {
     register int i, r, maxr = 0;
     for (i = 0; i < 9; i++) {
         if (urole.rank[i].m && (r = strlen(urole.rank[i].m)) > maxr)
             maxr = r;
         if (urole.rank[i].f && (r = strlen(urole.rank[i].f)) > maxr)
             maxr = r;
     }
     mrank_sz = maxr;
     return;
 }
 

botl_score

 #ifdef SCORE_ON_BOTL
 long
 botl_score()
 {
     long deepest = deepest_lev_reached(FALSE);
     long utotal;
 
     utotal = money_cnt(invent) + hidden_gold();
     if ((utotal -= u.umoney0) < 0L)
         utotal = 0L;
     utotal += u.urexp + (50 * (deepest - 1))
           + (deepest > 30 ? 10000 : deepest > 20 ? 1000 * (deepest - 20) : 0);
     if (utotal < u.urexp)
         utotal = LONG_MAX; /* wrap around */
     return utotal;
 }
 #endif /* SCORE_ON_BOTL */
 

describe_level

 /* provide the name of the current level for display by various ports */
 int
 describe_level(buf)
 char *buf;
 {
     int ret = 1;
 
     /* TODO:    Add in dungeon name */
     if (Is_knox(&u.uz))
         Sprintf(buf, "%s ", dungeons[u.uz.dnum].dname);
     else if (In_quest(&u.uz))
         Sprintf(buf, "Home %d ", dunlev(&u.uz));
     else if (In_endgame(&u.uz))
         Sprintf(buf, Is_astralevel(&u.uz) ? "Astral Plane " : "End Game ");
     else {
         /* ports with more room may expand this one */
         Sprintf(buf, "Dlvl:%-2d ", depth(&u.uz));
         ret = 0;
     }
     return ret;
 }
 

Status via windowport

 #ifdef STATUS_VIA_WINDOWPORT
 /* =======================================================================*/
 
 /* structure that tracks the status details in the core */
 struct istat_s {
     long time;
     unsigned anytype;
     anything a;
     char *val;
     int valwidth;
     enum statusfields idxmax;
     enum statusfields fld;
 };
 
 
 STATIC_DCL void NDECL(init_blstats);
 STATIC_DCL char *FDECL(anything_to_s, (char *, anything *, int));
 STATIC_DCL void FDECL(s_to_anything, (anything *, char *, int));
 STATIC_OVL int FDECL(percentage, (struct istat_s *, struct istat_s *));
 STATIC_OVL int FDECL(compare_blstats, (struct istat_s *, struct istat_s *));
 
 #ifdef STATUS_HILITES
 STATIC_DCL boolean FDECL(assign_hilite, (char *, char *, char *, char *,
                                          BOOLEAN_P));
 STATIC_DCL const char *FDECL(clridx_to_s, (char *, int));
 #endif
 
 /* If entries are added to this, botl.h will require updating too */
 STATIC_DCL struct istat_s initblstats[MAXBLSTATS] = {
     { 0L, ANY_STR,  { (genericptr_t) 0 }, (char *) 0, 80,  0, BL_TITLE},
     { 0L, ANY_INT,  { (genericptr_t) 0 }, (char *) 0, 10,  0, BL_STR},
     { 0L, ANY_INT,  { (genericptr_t) 0 }, (char *) 0, 10,  0, BL_DX},
     { 0L, ANY_INT,  { (genericptr_t) 0 }, (char *) 0, 10,  0, BL_CO},
     { 0L, ANY_INT,  { (genericptr_t) 0 }, (char *) 0, 10,  0, BL_IN},
     { 0L, ANY_INT,  { (genericptr_t) 0 }, (char *) 0, 10,  0, BL_WI},
     { 0L, ANY_INT,  { (genericptr_t) 0 }, (char *) 0, 10,  0, BL_CH},
     { 0L, ANY_STR,  { (genericptr_t) 0 }, (char *) 0, 40,  0, BL_ALIGN},
     { 0L, ANY_LONG, { (genericptr_t) 0 }, (char *) 0, 20,  0, BL_SCORE},
     { 0L, ANY_LONG, { (genericptr_t) 0 }, (char *) 0, 20,  0, BL_CAP},
     { 0L, ANY_LONG, { (genericptr_t) 0 }, (char *) 0, 30,  0, BL_GOLD},
     { 0L, ANY_INT,  { (genericptr_t) 0 }, (char *) 0, 10,  BL_ENEMAX, BL_ENE},
     { 0L, ANY_INT,  { (genericptr_t) 0 }, (char *) 0, 10,  0, BL_ENEMAX},
     { 0L, ANY_LONG, { (genericptr_t) 0 }, (char *) 0, 10,  0, BL_XP},
     { 0L, ANY_INT,  { (genericptr_t) 0 }, (char *) 0, 10,  0, BL_AC},
     { 0L, ANY_INT,  { (genericptr_t) 0 }, (char *) 0, 10,  0, BL_HD},
     { 0L, ANY_INT,  { (genericptr_t) 0 }, (char *) 0, 20,  0, BL_TIME},
     { 0L, ANY_UINT, { (genericptr_t) 0 }, (char *) 0, 40,  0, BL_HUNGER},
     { 0L, ANY_INT,  { (genericptr_t) 0 }, (char *) 0, 10,  BL_HPMAX, BL_HP},
     { 0L, ANY_INT,  { (genericptr_t) 0 }, (char *) 0, 10,  0, BL_HPMAX},
     { 0L, ANY_STR,  { (genericptr_t) 0 }, (char *) 0, 80,  0, BL_LEVELDESC},
     { 0L, ANY_LONG, { (genericptr_t) 0 }, (char *) 0, 20,  0, BL_EXP},
     { 0L, ANY_MASK32,
                     { (genericptr_t) 0 }, (char *) 0,  0,  0, BL_CONDITION}
 };
 
 static struct fieldid_t {
         const char *fieldname;
         enum statusfields fldid;
 } fieldids[] = {
         {"title",               BL_TITLE},
         {"strength",            BL_STR},
         {"dexterity",           BL_DX},
         {"constitution",        BL_CO},
         {"intelligence",        BL_IN},
         {"wisdom",              BL_WI},
         {"charisma",            BL_CH},
         {"alignment",           BL_ALIGN},
         {"score",               BL_SCORE},
         {"carrying-capacity",   BL_CAP},
         {"gold",                BL_GOLD},
         {"power",               BL_ENE},
         {"power-max",           BL_ENEMAX},
         {"experience-level",    BL_XP},
         {"armor-class",         BL_AC},
         {"HD",                  BL_HD},
         {"time",                BL_TIME},
         {"hunger",              BL_HUNGER},
         {"hitpoints",           BL_HP},
         {"hitpoints-max",       BL_HPMAX},
         {"dungeon-level",       BL_LEVELDESC},
         {"experience",          BL_EXP},
         {"condition",           BL_CONDITION},
 };
 
 struct istat_s blstats[2][MAXBLSTATS];
 static boolean blinit = FALSE, update_all = FALSE;
 

bot

 void
 bot()
 {
     char buf[BUFSZ];
     register char *nb;
     static int idx = 0, idx_p, idxmax;
     boolean updated = FALSE;
     unsigned anytype;
     int i, pc, chg, cap;
     struct istat_s *curr, *prev;
     boolean valset[MAXBLSTATS], chgval = FALSE;
 
     if (!blinit)
         panic("bot before init.");
     if (!youmonst.data) {
         context.botl = context.botlx = 0;
         update_all = FALSE;
         return;
     }
 
     cap = near_capacity();
     idx_p = idx;
     idx = 1 - idx; /* 0 -> 1, 1 -> 0 */
 
     /* clear the "value set" indicators */
     (void) memset((genericptr_t) valset, 0, MAXBLSTATS * sizeof(boolean));
 
     /*
      *  Player name and title.
      */
     buf[0] = '\0';
     Strcpy(buf, plname);
     if ('a' <= buf[0] && buf[0] <= 'z')
         buf[0] += 'A' - 'a';
     buf[10] = 0;
     Sprintf(nb = eos(buf), " the ");
     if (Upolyd) {
         char mbot[BUFSZ];
         int k = 0;
 
         Strcpy(mbot, mons[u.umonnum].mname);
         while (mbot[k] != 0) {
             if ((k == 0 || (k > 0 && mbot[k - 1] == ' ')) && 'a' <= mbot[k]
                 && mbot[k] <= 'z')
                 mbot[k] += 'A' - 'a';
             k++;
         }
         Sprintf1(nb = eos(nb), mbot);
     } else
         Sprintf1(nb = eos(nb), rank());
     Sprintf(blstats[idx][BL_TITLE].val, "%-29s", buf);
     valset[BL_TITLE] = TRUE; /* indicate val already set */
 
     /* Strength */
 
     buf[0] = '\0';
     blstats[idx][BL_STR].a.a_int = ACURR(A_STR);
     if (ACURR(A_STR) > 18) {
         if (ACURR(A_STR) > STR18(100))
             Sprintf(buf, "%2d", ACURR(A_STR) - 100);
         else if (ACURR(A_STR) < STR18(100))
             Sprintf(buf, "18/%02d", ACURR(A_STR) - 18);
         else
             Sprintf(buf, "18/**");
     } else
         Sprintf(buf, "%-1d", ACURR(A_STR));
     Strcpy(blstats[idx][BL_STR].val, buf);
     valset[BL_STR] = TRUE; /* indicate val already set */
 
     /*  Dexterity, constitution, intelligence, wisdom, charisma. */
 
     blstats[idx][BL_DX].a.a_int = ACURR(A_DEX);
     blstats[idx][BL_CO].a.a_int = ACURR(A_CON);
     blstats[idx][BL_IN].a.a_int = ACURR(A_INT);
     blstats[idx][BL_WI].a.a_int = ACURR(A_WIS);
     blstats[idx][BL_CH].a.a_int = ACURR(A_CHA);
 
     /* Alignment */
 
     Strcpy(blstats[idx][BL_ALIGN].val,
            (u.ualign.type == A_CHAOTIC)
                ? "Chaotic"
                : (u.ualign.type == A_NEUTRAL) ? "Neutral" : "Lawful");
 
     /* Score */
 
     blstats[idx][BL_SCORE].a.a_long =
 #ifdef SCORE_ON_BOTL
         botl_score();
 #else
         0;
 #endif
     /*  Hit points  */
 
     blstats[idx][BL_HP].a.a_int = Upolyd ? u.mh : u.uhp;
     blstats[idx][BL_HPMAX].a.a_int = Upolyd ? u.mhmax : u.uhpmax;
     if (blstats[idx][BL_HP].a.a_int < 0)
         blstats[idx][BL_HP].a.a_int = 0;
 
     /*  Dungeon level. */
 
     (void) describe_level(blstats[idx][BL_LEVELDESC].val);
     valset[BL_LEVELDESC] = TRUE; /* indicate val already set */
 
     /* Gold */
 
     blstats[idx][BL_GOLD].a.a_long = money_cnt(invent);
     /*
      * The tty port needs to display the current symbol for gold
      * as a field header, so to accommodate that we pass gold with
      * that already included. If a window port needs to use the text
      * gold amount without the leading "$:" the port will have to
      * add 2 to the value pointer it was passed in status_update()
      * for the BL_GOLD case.
      *
      * Another quirk of BL_GOLD is that the field display may have
      * changed if a new symbol set was loaded, or we entered or left
      * the rogue level.
      */
 
     Sprintf(blstats[idx][BL_GOLD].val, "%s:%ld",
             encglyph(objnum_to_glyph(GOLD_PIECE)),
             blstats[idx][BL_GOLD].a.a_long);
     valset[BL_GOLD] = TRUE; /* indicate val already set */
 
     /* Power (magical energy) */
 
     blstats[idx][BL_ENE].a.a_int = u.uen;
     blstats[idx][BL_ENEMAX].a.a_int = u.uenmax;
 
     /* Armor class */
 
     blstats[idx][BL_AC].a.a_int = u.uac;
 
     /* Monster level (if Upolyd) */
 
     if (Upolyd)
         blstats[idx][BL_HD].a.a_int = mons[u.umonnum].mlevel;
     else
         blstats[idx][BL_HD].a.a_int = 0;
 
     /* Experience */
 
     blstats[idx][BL_XP].a.a_int = u.ulevel;
     blstats[idx][BL_EXP].a.a_int = u.uexp;
 
     /* Time (moves) */
 
     blstats[idx][BL_TIME].a.a_long = moves;
 
     /* Hunger */
 
     blstats[idx][BL_HUNGER].a.a_uint = u.uhs;
     *(blstats[idx][BL_HUNGER].val) = '\0';
     if (strcmp(hu_stat[u.uhs], "        ") != 0)
         Strcpy(blstats[idx][BL_HUNGER].val, hu_stat[u.uhs]);
     valset[BL_HUNGER] = TRUE;
 
     /* Carrying capacity */
 
     *(blstats[idx][BL_CAP].val) = '\0';
     blstats[idx][BL_CAP].a.a_int = cap;
     if (cap > UNENCUMBERED)
         Strcpy(blstats[idx][BL_CAP].val, enc_stat[cap]);
     valset[BL_CAP] = TRUE;
 
     /* Conditions */
 
     if (Blind)
         blstats[idx][BL_CONDITION].a.a_ulong |= BL_MASK_BLIND;
     else
         blstats[idx][BL_CONDITION].a.a_ulong &= ~BL_MASK_BLIND;
 
     if (Confusion)
         blstats[idx][BL_CONDITION].a.a_ulong |= BL_MASK_CONF;
     else
         blstats[idx][BL_CONDITION].a.a_ulong &= ~BL_MASK_CONF;
 
     if (Sick && u.usick_type & SICK_VOMITABLE)
         blstats[idx][BL_CONDITION].a.a_ulong |= BL_MASK_FOODPOIS;
     else
         blstats[idx][BL_CONDITION].a.a_ulong &= ~BL_MASK_FOODPOIS;
 
     if (Sick && u.usick_type & SICK_NONVOMITABLE)
         blstats[idx][BL_CONDITION].a.a_ulong |= BL_MASK_ILL;
     else
         blstats[idx][BL_CONDITION].a.a_ulong &= ~BL_MASK_ILL;
 
     if (Hallucination)
         blstats[idx][BL_CONDITION].a.a_ulong |= BL_MASK_HALLU;
     else
         blstats[idx][BL_CONDITION].a.a_ulong &= ~BL_MASK_HALLU;
 
     if (Stunned)
         blstats[idx][BL_CONDITION].a.a_ulong |= BL_MASK_STUNNED;
     else
         blstats[idx][BL_CONDITION].a.a_ulong &= ~BL_MASK_STUNNED;
 
     if (Slimed)
         blstats[idx][BL_CONDITION].a.a_ulong |= BL_MASK_SLIMED;
     else
         blstats[idx][BL_CONDITION].a.a_ulong &= ~BL_MASK_SLIMED;
 
     /*
      *  Now pass the changed values to window port.
      */
     for (i = 0; i < MAXBLSTATS; i++) {
         if (((i == BL_SCORE) && !flags.showscore)
             || ((i == BL_EXP) && !flags.showexp)
             || ((i == BL_TIME) && !flags.time)
             || ((i == BL_HD) && !Upolyd)
             || ((i == BL_XP || i == BL_EXP) && Upolyd))
             continue;
         anytype = blstats[idx][i].anytype;
         curr = &blstats[idx][i];
         prev = &blstats[idx_p][i];
         chg = 0;
         if (update_all || ((chg = compare_blstats(prev, curr)) != 0)
             || ((chgval = (valset[i] && strcmp(blstats[idx][i].val,
                                                blstats[idx_p][i].val)))
                 != 0)) {
             idxmax = blstats[idx][i].idxmax;
             pc = (idxmax) ? percentage(curr, &blstats[idx][idxmax]) : 0;
             if (!valset[i])
                 (void) anything_to_s(curr->val, &curr->a, anytype);
             if (anytype != ANY_MASK32) {
                 status_update(i, (genericptr_t) curr->val,
                               valset[i] ? chgval : chg, pc);
             } else {
                 status_update(i,
                               /* send pointer to mask */
                               (genericptr_t) &curr->a.a_ulong, chg, 0);
             }
             updated = TRUE;
         }
     }
     /*
      * It is possible to get here, with nothing having been pushed
      * to the window port, when none of the info has changed. In that
      * case, we need to force a call to status_update() when
      * context.botlx is set. The tty port in particular has a problem
      * if that isn't done, since it sets context.botlx when a menu or
      * text display obliterates the status line.
      *
      * To work around it, we call status_update() with fictitious
      * index of BL_FLUSH (-1).
      */
     if (context.botlx && !updated)
         status_update(BL_FLUSH, (genericptr_t) 0, 0, 0);
 
     context.botl = context.botlx = 0;
     update_all = FALSE;
 }
 

status_initialize

 void
 status_initialize(reassessment)
 boolean
     reassessment; /* TRUE = just reassess fields w/o other initialization*/
 {
     int i;
     const char *fieldfmt = (const char *)0;
     const char *fieldname = (const char *)0;
 
     if (!reassessment) {
         init_blstats();
         (*windowprocs.win_status_init)();
         blinit = TRUE;
 #ifdef STATUS_HILITES
         status_notify_windowport(TRUE);
 #endif
     }
     for (i = 0; i < MAXBLSTATS; ++i) {
         enum statusfields fld = initblstats[i].fld;
 
         switch (fld) {
         case BL_TITLE:
             fieldfmt = "%s";
             fieldname = "title";
             status_enablefield(fld, fieldname, fieldfmt, TRUE);
             break;
         case BL_STR:
             fieldfmt = " St:%s";
             fieldname = "strength";
             status_enablefield(fld, fieldname, fieldfmt, TRUE);
             break;
         case BL_DX:
             fieldfmt = " Dx:%s";
             fieldname = "dexterity";
             status_enablefield(fld, fieldname, fieldfmt, TRUE);
             break;
         case BL_CO:
             fieldfmt = " Co:%s";
             fieldname = "constitution";
             status_enablefield(fld, fieldname, fieldfmt, TRUE);
             break;
         case BL_IN:
             fieldfmt = " In:%s";
             fieldname = "intelligence";
             status_enablefield(fld, fieldname, fieldfmt, TRUE);
             break;
         case BL_WI:
             fieldfmt = " Wi:%s";
             fieldname = "wisdom";
             status_enablefield(fld, fieldname, fieldfmt, TRUE);
             break;
         case BL_CH:
             fieldfmt = " Ch:%s";
             fieldname = "charisma";
             status_enablefield(fld, fieldname, fieldfmt, TRUE);
             break;
         case BL_ALIGN:
             fieldfmt = " %s";
             fieldname = "alignment";
             status_enablefield(fld, fieldname, fieldfmt, TRUE);
             break;
         case BL_SCORE:
             fieldfmt = " S:%s";
             fieldname = "score";
             status_enablefield(fld, fieldname, fieldfmt,
                                (!flags.showscore) ? FALSE : TRUE);
             break;
         case BL_CAP:
             fieldfmt = " %s";
             fieldname = "carrying-capacity";
             status_enablefield(fld, fieldname, fieldfmt, TRUE);
             break;
         case BL_GOLD:
             fieldfmt = " %s";
             fieldname = "gold";
             status_enablefield(fld, fieldname, fieldfmt, TRUE);
             break;
         case BL_ENE:
             fieldfmt = " Pw:%s";
             fieldname = "power";
             status_enablefield(fld, fieldname, fieldfmt, TRUE);
             break;
         case BL_ENEMAX:
             fieldfmt = "(%s)";
             fieldname = "power-max";
             status_enablefield(fld, fieldname, fieldfmt, TRUE);
             break;
         case BL_XP:
             fieldfmt = " Xp:%s";
             fieldname = "experience-level";
             status_enablefield(fld, fieldname, fieldfmt,
                                    (Upolyd) ? FALSE : TRUE);
             break;
         case BL_AC:
             fieldfmt = " AC:%s";
             fieldname = "armor-class";
             status_enablefield(fld, fieldname, fieldfmt, TRUE);
             break;
         case BL_HD:
             fieldfmt = " HD:%s";
             fieldname = "HD";
             status_enablefield(fld, fieldname, fieldfmt,
                                    (!Upolyd) ? FALSE : TRUE);
             break;
         case BL_TIME:
             fieldfmt = " T:%s";
             fieldname = "time";
             status_enablefield(fld, fieldname, fieldfmt,
                                    (!flags.time) ? FALSE : TRUE);
             break;
         case BL_HUNGER:
             fieldfmt = " %s";
             fieldname = "hunger";
             status_enablefield(fld, fieldname, fieldfmt, TRUE);
             break;
         case BL_HP:
             fieldfmt = " HP:%s";
             fieldname = "hitpoints";
             status_enablefield(fld, fieldname, fieldfmt, TRUE);
             break;
         case BL_HPMAX:
             fieldfmt = "(%s)";
             fieldname = "hitpoint-max";
             status_enablefield(fld, fieldname, fieldfmt, TRUE);
             break;
         case BL_LEVELDESC:
             fieldfmt = "%s";
             fieldname = "dungeon-level";
             status_enablefield(fld, fieldname, fieldfmt, TRUE);
             break;
         case BL_EXP:
             fieldfmt = "/%s";
             fieldname = "experience";
             status_enablefield(fld, fieldname, fieldfmt,
                                   (!flags.showexp || Upolyd) ? FALSE : TRUE);
             break;
         case BL_CONDITION:
             fieldfmt = "%S";
             fieldname = "condition";
             status_enablefield(fld, fieldname, fieldfmt, TRUE);
             break;
         case BL_FLUSH:
         default:
             break;
         }
     }
     update_all = TRUE;
 }
 

status_finish

 void
 status_finish()
 {
     int i;
 
     /* call the window port cleanup routine first */
     (*windowprocs.win_status_finish)();
 
     /* free memory that we alloc'd now */
     for (i = 0; i < MAXBLSTATS; ++i) {
         if (blstats[0][i].val)
             free((genericptr_t) blstats[0][i].val);
         if (blstats[1][i].val)
             free((genericptr_t) blstats[1][i].val);
     }
 }
 

init_blstats

 STATIC_OVL void
 init_blstats()
 {
     static boolean initalready = FALSE;
     int i, j;
 
     if (initalready) {
         impossible("init_blstats called more than once.");
         return;
     }
 
     initalready = TRUE;
     for (i = BEFORE; i <= NOW; ++i) {
         for (j = 0; j < MAXBLSTATS; ++j) {
             blstats[i][j] = initblstats[j];
             blstats[i][j].a = zeroany;
             if (blstats[i][j].valwidth) {
                 blstats[i][j].val = (char *) alloc(blstats[i][j].valwidth);
                 blstats[i][j].val[0] = '\0';
             } else
                 blstats[i][j].val = (char *) 0;
         }
     }
 }
 

anything_to_s

 STATIC_OVL char *
 anything_to_s(buf, a, anytype)
 char *buf;
 anything *a;
 int anytype;
 {
     if (!buf)
         return (char *) 0;
 
     switch (anytype) {
     case ANY_ULONG:
         Sprintf(buf, "%lu", a->a_ulong);
         break;
     case ANY_MASK32:
         Sprintf(buf, "%lx", a->a_ulong);
         break;
     case ANY_LONG:
         Sprintf(buf, "%ld", a->a_long);
         break;
     case ANY_INT:
         Sprintf(buf, "%d", a->a_int);
         break;
     case ANY_UINT:
         Sprintf(buf, "%u", a->a_uint);
         break;
     case ANY_IPTR:
         Sprintf(buf, "%d", *a->a_iptr);
         break;
     case ANY_LPTR:
         Sprintf(buf, "%ld", *a->a_lptr);
         break;
     case ANY_ULPTR:
         Sprintf(buf, "%lu", *a->a_ulptr);
         break;
     case ANY_UPTR:
         Sprintf(buf, "%u", *a->a_uptr);
         break;
     case ANY_STR: /* do nothing */
         ;
         break;
     default:
         buf[0] = '\0';
     }
     return buf;
 }
 

s_to_anything

 STATIC_OVL void
 s_to_anything(a, buf, anytype)
 anything *a;
 char *buf;
 int anytype;
 {
     if (!buf || !a)
         return;
 
     switch (anytype) {
     case ANY_LONG:
         a->a_long = atol(buf);
         break;
     case ANY_INT:
         a->a_int = atoi(buf);
         break;
     case ANY_UINT:
         a->a_uint = (unsigned) atoi(buf);
         break;
     case ANY_ULONG:
         a->a_ulong = (unsigned long) atol(buf);
         break;
     case ANY_IPTR:
         if (a->a_iptr)
             *a->a_iptr = atoi(buf);
         break;
     case ANY_UPTR:
         if (a->a_uptr)
             *a->a_uptr = (unsigned) atoi(buf);
         break;
     case ANY_LPTR:
         if (a->a_lptr)
             *a->a_lptr = atol(buf);
         break;
     case ANY_ULPTR:
         if (a->a_ulptr)
             *a->a_ulptr = (unsigned long) atol(buf);
         break;
     case ANY_MASK32:
         a->a_ulong = (unsigned long) atol(buf);
         break;
     default:
         a->a_void = 0;
         break;
     }
     return;
 }
 

compare_blstats

 STATIC_OVL int
 compare_blstats(bl1, bl2)
 struct istat_s *bl1, *bl2;
 {
     int anytype, result = 0;
 
     if (!bl1 || !bl2) {
         panic("compare_blstat: bad istat pointer %s, %s",
               fmt_ptr((genericptr_t) bl1), fmt_ptr((genericptr_t) bl2));
     }
 
     anytype = bl1->anytype;
     if ((!bl1->a.a_void || !bl2->a.a_void)
         && (anytype == ANY_IPTR || anytype == ANY_UPTR || anytype == ANY_LPTR
             || anytype == ANY_ULPTR)) {
         panic("compare_blstat: invalid pointer %s, %s",
               fmt_ptr((genericptr_t) bl1->a.a_void),
               fmt_ptr((genericptr_t) bl2->a.a_void));
     }
 
     switch (anytype) {
     case ANY_INT:
         result = (bl1->a.a_int < bl2->a.a_int)
                      ? 1
                      : (bl1->a.a_int > bl2->a.a_int) ? -1 : 0;
         break;
     case ANY_IPTR:
         result = (*bl1->a.a_iptr < *bl2->a.a_iptr)
                      ? 1
                      : (*bl1->a.a_iptr > *bl2->a.a_iptr) ? -1 : 0;
         break;
     case ANY_LONG:
         result = (bl1->a.a_long < bl2->a.a_long)
                      ? 1
                      : (bl1->a.a_long > bl2->a.a_long) ? -1 : 0;
         break;
     case ANY_LPTR:
         result = (*bl1->a.a_lptr < *bl2->a.a_lptr)
                      ? 1
                      : (*bl1->a.a_lptr > *bl2->a.a_lptr) ? -1 : 0;
         break;
     case ANY_UINT:
         result = (bl1->a.a_uint < bl2->a.a_uint)
                      ? 1
                      : (bl1->a.a_uint > bl2->a.a_uint) ? -1 : 0;
         break;
     case ANY_UPTR:
         result = (*bl1->a.a_uptr < *bl2->a.a_uptr)
                      ? 1
                      : (*bl1->a.a_uptr > *bl2->a.a_uptr) ? -1 : 0;
         break;
     case ANY_ULONG:
         result = (bl1->a.a_ulong < bl2->a.a_ulong)
                      ? 1
                      : (bl1->a.a_ulong > bl2->a.a_ulong) ? -1 : 0;
         break;
     case ANY_ULPTR:
         result = (*bl1->a.a_ulptr < *bl2->a.a_ulptr)
                      ? 1
                      : (*bl1->a.a_ulptr > *bl2->a.a_ulptr) ? -1 : 0;
         break;
     case ANY_STR:
         if (strcmp(bl1->val, bl2->val) == 0)
             result = 0;
         else
             result = 1;
         break;
     case ANY_MASK32:
         if (bl1->a.a_ulong == bl2->a.a_ulong)
             result = 0;
         else
             result = 1;
         break;
     default:
         result = 1;
     }
     return result;
 }
 

percentage

 STATIC_OVL int
 percentage(bl, maxbl)
 struct istat_s *bl, *maxbl;
 {
     int result = 0;
     int anytype;
 
     if (!bl || !maxbl) {
         impossible("percentage: bad istat pointer %s, %s",
                    fmt_ptr((genericptr_t) bl), fmt_ptr((genericptr_t) maxbl));
         return 0;
     }
 
     anytype = bl->anytype;
     if (maxbl->a.a_void) {
         switch (anytype) {
         case ANY_INT:
             result = ((100 * bl->a.a_int) / maxbl->a.a_int);
             break;
         case ANY_LONG:
             result = (int) ((100L * bl->a.a_long) / maxbl->a.a_long);
             break;
         case ANY_UINT:
             result = (int) ((100U * bl->a.a_uint) / maxbl->a.a_uint);
             break;
         case ANY_ULONG:
             result = (int) ((100UL * bl->a.a_ulong) / maxbl->a.a_ulong);
             break;
         case ANY_IPTR:
             result = ((100 * (*bl->a.a_iptr)) / (*maxbl->a.a_iptr));
             break;
         case ANY_LPTR:
             result = (int) ((100L * (*bl->a.a_lptr)) / (*maxbl->a.a_lptr));
             break;
         case ANY_UPTR:
             result = (int) ((100U * (*bl->a.a_uptr)) / (*maxbl->a.a_uptr));
             break;
         case ANY_ULPTR:
             result = (int) ((100UL * (*bl->a.a_ulptr)) / (*maxbl->a.a_ulptr));
             break;
         }
     }
     return result;
 }
 
 

set_status_hilites

 #ifdef STATUS_HILITES
 
 /****************************************************************************/
 /* Core status hiliting support */
 /****************************************************************************/
 
 struct hilite_s {
     boolean set;
     unsigned anytype;
     anything threshold;
     int behavior;
     int coloridx[2];
 };
 
 struct hilite_s status_hilites[MAXBLSTATS];
 
 /*
  * This is the parser for the hilite options
  * Example:
  *    OPTION=hilite_status: hitpoints/10%/red/normal
  *
  * set_hilite_status() separates each hilite entry into its 4 component
  * strings, then calls assign_hilite() to make the adjustments.
  */
 boolean
 set_status_hilites(op, from_configfile)
 char *op;
 boolean from_configfile;
 {
     char hsbuf[4][QBUFSZ];
     boolean rslt, badopt = FALSE;
     int fldnum, num = 0, ccount = 0;
     char c;
 
     num = fldnum = 0;
     hsbuf[0][0] = hsbuf[1][0] = hsbuf[2][0] = hsbuf[3][0] = '\0';
     while (*op && fldnum < 4 && ccount < (QBUFSZ - 2)) {
         c = lowc(*op);
         if (c == ' ') {
             if (fldnum >= 2) {
                 rslt = assign_hilite(&hsbuf[0][0], &hsbuf[1][0], &hsbuf[2][0],
                                      &hsbuf[3][0], from_configfile);
                 if (!rslt) {
                     badopt = TRUE;
                     break;
                 }
             }
             hsbuf[0][0] = hsbuf[1][0] = '\0';
             hsbuf[2][0] = hsbuf[3][0] = '\0';
             fldnum = 0;
             ccount = 0;
         } else if (c == '/') {
             fldnum++;
             ccount = 0;
         } else {
             hsbuf[fldnum][ccount++] = c;
             hsbuf[fldnum][ccount] = '\0';
         }
         op++;
     }
     if (fldnum >= 2 && !badopt) {
         rslt = assign_hilite(&hsbuf[0][0], &hsbuf[1][0], &hsbuf[2][0],
                              &hsbuf[3][0], from_configfile);
         if (!rslt)
             badopt = TRUE;
     }
     if (badopt)
         return FALSE;
     return TRUE;
 }
 

clear_status_hilites

 void
 clear_status_hilites(from_configfile)
 boolean from_configfile;
 {
     int i;
     anything it;
     it = zeroany;
     for (i = 0; i < MAXBLSTATS; ++i) {
         (void) memset((genericptr_t) &status_hilites[i], 0,
                       sizeof(struct hilite_s));
         /* notify window port */
         if (!from_configfile)
             status_threshold(i, blstats[0][i].anytype, it, 0, 0, 0);
     }
 }
 

assign_hilite

 STATIC_OVL boolean
 assign_hilite(sa, sb, sc, sd, from_configfile)
 char *sa, *sb, *sc, *sd;
 boolean from_configfile;
 {
     char *tmp, *how;
     int i = -1, dt = -1, idx = -1;
     int coloridx[2] = { -1, -1 };
     boolean inverse[2] = { FALSE, FALSE };
     boolean bold[2] = { FALSE, FALSE };
     boolean normal[2] = { 0, 0 };
     boolean percent = FALSE, down_up = FALSE, changed = FALSE;
     anything threshold;
     enum statusfields fld = BL_FLUSH;
     threshold.a_void = 0;
 
     /* Example:
      *  hilite_status: hitpoints/10%/red/normal
      */
 
     /* field name to statusfield */
     for (i = 0; sa && i < SIZE(fieldids); ++i) {
         if (strcmpi(sa, fieldids[i].fieldname) == 0) {
             idx = i;
             fld = fieldids[i].fldid;
             break;
         }
     }
     if (idx == -1)
         return FALSE;
     status_hilites[idx].set = FALSE; /* mark it "unset" */
 
     /* threshold */
     if (!sb)
         return FALSE;
     if ((strcmpi(sb, "updown") == 0) || (strcmpi(sb, "downup") == 0)
         || (strcmpi(sb, "up") == 0) || (strcmpi(sb, "down") == 0)) {
         down_up = TRUE;
     } else if ((strcmpi(sb, "changed") == 0)
                && (fld == BL_TITLE || fld == BL_ALIGN || fld == BL_LEVELDESC
                    || fld == BL_CONDITION)) {
         changed = TRUE; /* changed is only thing allowed */
     } else {
         tmp = sb;
         while (*tmp) {
             if (*tmp == '%') {
                 *tmp = '\0';
                 percent = TRUE;
                 break;
             } else if (!index("0123456789", *tmp))
                 return FALSE;
             tmp++;
         }
         if (strlen(sb) > 0) {
             dt = blstats[0][idx].anytype;
             if (percent)
                 dt = ANY_INT;
             (void) s_to_anything(&threshold, sb, dt);
         } else
             return FALSE;
         if (percent && (threshold.a_int < 1 || threshold.a_int > 100))
             return FALSE;
         if (!threshold.a_void && (strcmp(sb, "0") != 0))
             return FALSE;
     }
 
     /* actions */
     for (i = 0; i < 2; ++i) {
         if (!i)
             how = sc;
         else
             how = sd;
         if (!how) {
             if (!i)
                 return FALSE;
             else
                 break; /* sc is mandatory; sd is not */
         }
 
         if (strcmpi(how, "bold") == 0) {
             bold[i] = TRUE;
         } else if (strcmpi(how, "inverse") == 0) {
             inverse[i] = TRUE;
         } else if (strcmpi(how, "normal") == 0) {
             normal[i] = TRUE;
         } else {
             int k;
             char colorname[BUFSZ];
             for (k = 0; k < CLR_MAX; ++k) {
                 /* we have to make a copy to change space to dash */
                 (void) strcpy(colorname, c_obj_colors[k]);
                 for (tmp = index(colorname, ' '); tmp;
                      tmp = index(colorname, ' '))
                     *tmp = '-';
                 if (strcmpi(how, colorname) == 0) {
                     coloridx[i] = k;
                     break;
                 }
             }
             if (k >= CLR_MAX)
                 return FALSE;
         }
     }
 
     /* Assign the values */
 
     for (i = 0; i < 2; ++i) {
         if (inverse[i])
             status_hilites[idx].coloridx[i] = BL_HILITE_INVERSE;
         else if (bold[i])
             status_hilites[idx].coloridx[i] = BL_HILITE_BOLD;
         else if (coloridx[i])
             status_hilites[idx].coloridx[i] = coloridx[i];
         else
             status_hilites[idx].coloridx[i] = BL_HILITE_NONE;
     }
 
     if (percent)
         status_hilites[idx].behavior = BL_TH_VAL_PERCENTAGE;
     else if (down_up)
         status_hilites[idx].behavior = BL_TH_UPDOWN;
     else if (threshold.a_void)
         status_hilites[idx].behavior = BL_TH_VAL_ABSOLUTE;
     else
         status_hilites[idx].behavior = BL_TH_NONE;
 
     if (status_hilites[idx].behavior != BL_TH_NONE) {
         status_hilites[idx].threshold = threshold;
         status_hilites[idx].set = TRUE;
     }
     status_hilites[idx].anytype = dt;
 
     /* Now finally, we notify the window port */
     if (!from_configfile)
         status_threshold(idx, status_hilites[idx].anytype,
                         status_hilites[idx].threshold,
                         status_hilites[idx].behavior,
                         status_hilites[idx].coloridx[0],
                         status_hilites[idx].coloridx[1]);
 
     return TRUE;
 }
 

status_notify_windowport

 void
 status_notify_windowport(all)
 boolean all;
 {
     int idx;
     anything it;
 
     it = zeroany;
     for (idx = 0; idx < MAXBLSTATS; ++idx) {
         if (status_hilites[idx].set)
             status_threshold(idx, status_hilites[idx].anytype,
                             status_hilites[idx].threshold,
                             status_hilites[idx].behavior,
                             status_hilites[idx].coloridx[0],
                             status_hilites[idx].coloridx[1]);
         else
             status_threshold(idx, blstats[0][idx].anytype, it, 0, 0, 0);
 
     }
 }
 

get_status_hilites

 /*
  * get_status_hilites
  *
  * Returns a string containing all the status hilites in the
  * same format that is used to specify a status hilite preference
  * in the config file.
  */
 char *
 get_status_hilites(buf, bufsiz)
 char *buf;
 int bufsiz;
 {
     int i, j, k, coloridx;
     const char *text = (char *) 0;
     char tmp[BUFSZ], colorname[BUFSZ];
     boolean val_percentage, val_absolute, up_down;
     boolean added_one = FALSE;
 
     if (!buf)
         return (char *) 0;
     *buf = '\0';
 
     bufsiz--; /* required trailing null */
     for (i = 0; i < MAXBLSTATS; ++i) {
         val_percentage = val_absolute = up_down = FALSE;
         if (status_hilites[i].set) {
             if (!added_one)
                 added_one = TRUE;
             else {
                 Strcat(buf, " ");
                 bufsiz--;
             }
             k = strlen(fieldids[i].fieldname);
             if (k < bufsiz) {
                 Strcat(buf, fieldids[i].fieldname);
                 bufsiz -= k;
             }
             if (bufsiz > 1) {
                 Strcat(buf, "/");
                 bufsiz--;
             }
             if (status_hilites[i].behavior == BL_TH_VAL_PERCENTAGE) {
                 val_percentage = TRUE;
             } else if (status_hilites[i].behavior == BL_TH_VAL_ABSOLUTE) {
                 val_absolute = TRUE;
             } else if (status_hilites[i].behavior == BL_TH_UPDOWN) {
                 up_down = TRUE;
                 text = "updown";
             }
 
             if (status_hilites[i].behavior != BL_TH_UPDOWN) {
                 anything_to_s(tmp, &status_hilites[i].threshold,
                           blstats[0][i].anytype);
                 text = tmp;
             }
             k = strlen(text);
             if (k < (bufsiz - 1)) {
                 Strcat(buf, text);
                 if (val_percentage)
                     Strcat(buf, "%"), k++;
                 bufsiz -= k;
             }
             for (j = 0; j < 2; ++j) {
                 if (bufsiz > 1) {
                     Strcat(buf, "/");
                     bufsiz--;
                 }
                 coloridx = status_hilites[i].coloridx[j];
                 if (coloridx < 0) {
                     if (coloridx == BL_HILITE_BOLD)
                         text = "bold";
                     else if (coloridx == BL_HILITE_INVERSE)
                         text = "inverse";
                     else
                         text = "normal";
                 } else {
                     char *blank;
                     (void) strcpy(colorname, c_obj_colors[coloridx]);
                     for (blank = index(colorname, ' '); blank;
                          blank = index(colorname, ' '))
                         *blank = '-';
                     text = colorname;
                 }
                 k = strlen(text);
                 if (k < bufsiz) {
                     Strcat(buf, text);
                     bufsiz -= k;
                 }
             }
         }
     }
     return buf;
 }
 

clridx_to_s

 STATIC_OVL const char *
 clridx_to_s(buf, idx)
 char *buf;
 int idx;
 {
     static const char *a[] = { "bold", "inverse", "normal" };
     char* p = 0;
 
     if (buf) {
         buf[0] = '\0';
         if (idx < 0 && idx >= BL_HILITE_BOLD)
             Strcpy(buf, a[idx + 3]);
         else if (idx >= 0 && idx < CLR_MAX)
             Strcpy(buf, c_obj_colors[idx]);
         /* replace spaces with - */
         for(p = buf; *p; p++)
             if(*p == ' ') *p = '-';
     }
     return buf;
 }
 

status_hilite_menu

 boolean
 status_hilite_menu()
 {
     int i, j, k, pick_cnt, pick_idx, opt_idx;
     menu_item *statfield_picks = (menu_item *) 0;
     const char *fieldname;
     int field_picks[MAXBLSTATS], res;
     struct hilite_s hltemp[MAXBLSTATS];
     char buf[BUFSZ], thresholdbuf[BUFSZ], below[BUFSZ], above[BUFSZ];
     winid tmpwin;
     anything any;
 
     tmpwin = create_nhwindow(NHW_MENU);
     start_menu(tmpwin);
     for (i = 0; i < MAXBLSTATS; i++) {
         (void) memset(&hltemp[i], 0, sizeof(struct hilite_s));
         fieldname = fieldids[i].fieldname;
         any.a_int = i + 1;
         add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, fieldname,
                  MENU_UNSELECTED);
         field_picks[i] = 0;
     }
     end_menu(tmpwin, "Change hilite on which status field(s):");
     if ((pick_cnt = select_menu(tmpwin, PICK_ANY, &statfield_picks)) > 0) {
         for (pick_idx = 0; pick_idx < pick_cnt; ++pick_idx) {
             opt_idx = statfield_picks[pick_idx].item.a_int - 1;
             field_picks[opt_idx] = 1;
         }
         free((genericptr_t) statfield_picks);
         statfield_picks = (menu_item *) 0;
     }
     destroy_nhwindow(tmpwin);
     if (pick_cnt < 0)
         return FALSE;
 
     for (i = 0; i < MAXBLSTATS; i++) {
         if (field_picks[i]) {
             menu_item *pick = (menu_item *) 0;
             Sprintf(buf, "Threshold behavior options for %s:",
                     fieldids[i].fieldname);
             tmpwin = create_nhwindow(NHW_MENU);
             start_menu(tmpwin);
             if (i == BL_CONDITION) {
                 any = zeroany;
                 any.a_int = BL_TH_CONDITION + 1;
                 add_menu(tmpwin, NO_GLYPH, &any, 'c', 0, ATR_NONE,
                          "Condition bitmask threshold.", MENU_UNSELECTED);
             }
             any = zeroany;
             any.a_int = BL_TH_NONE + 1;
             add_menu(tmpwin, NO_GLYPH, &any, 'n', 0, ATR_NONE, "None",
                      MENU_UNSELECTED);
             if (i != BL_CONDITION) {
                 if (blstats[0][i].idxmax > 0) {
                     any = zeroany;
                     any.a_int = BL_TH_VAL_PERCENTAGE + 1;
                     add_menu(tmpwin, NO_GLYPH, &any, 'p', 0, ATR_NONE,
                              "Percentage threshold.", MENU_UNSELECTED);
                 }
                 any = zeroany;
                 any.a_int = BL_TH_UPDOWN + 1;
                 add_menu(tmpwin, NO_GLYPH, &any, 'u', 0, ATR_NONE,
                          "UpDown threshold.", MENU_UNSELECTED);
                 any = zeroany;
                 any.a_int = BL_TH_VAL_ABSOLUTE + 1;
                 add_menu(tmpwin, NO_GLYPH, &any, 'v', 0, ATR_NONE,
                          "Value threshold.", MENU_UNSELECTED);
             }
             end_menu(tmpwin, buf);
             if ((res = select_menu(tmpwin, PICK_ONE, &pick)) > 0) {
                 hltemp[i].behavior = pick->item.a_int - 1;
                 free((genericptr_t) pick);
             }
             destroy_nhwindow(tmpwin);
             if (res < 0)
                 return FALSE;
 
             if (hltemp[i].behavior == BL_TH_UPDOWN) {
                 Sprintf(below, "%s decreases", fieldids[i].fieldname);
                 Sprintf(above, "%s increases", fieldids[i].fieldname);
             } else if (hltemp[i].behavior) {
                 /* Have them enter the threshold*/
                 Sprintf(
                     buf, "Set %s threshold to what%s?", fieldids[i].fieldname,
                     (hltemp[i].behavior == BL_TH_VAL_PERCENTAGE)
                         ? " percentage"
                         : (hltemp[i].behavior == BL_TH_CONDITION) ? " mask"
                                                                   : "");
                 getlin(buf, thresholdbuf);
                 if (thresholdbuf[0] == '\033')
                     return FALSE;
                 (void) s_to_anything(&hltemp[i].threshold, thresholdbuf,
                                      blstats[0][i].anytype);
                 if (!hltemp[i].threshold.a_void)
                     return FALSE;
 
                 Sprintf(below, "%s falls below %s%s", fieldids[i].fieldname,
                         thresholdbuf,
                         (hltemp[i].behavior == BL_TH_VAL_PERCENTAGE) ? "%"
                                                                      : "");
                 Sprintf(above, "%s rises above %s%s", fieldids[i].fieldname,
                         thresholdbuf,
                         (hltemp[i].behavior == BL_TH_VAL_PERCENTAGE) ? "%"
                                                                      : "");
             }
             for (j = 0; j < 2 && (hltemp[i].behavior != BL_TH_NONE); ++j) {
                 char prompt[QBUFSZ];
                 /* j == 0 below, j == 1 above */
                 menu_item *pick2 = (menu_item *) 0;
 
                 Sprintf(prompt, "Display how when %s?", j ? above : below);
                 tmpwin = create_nhwindow(NHW_MENU);
                 start_menu(tmpwin);
                 for (k = -3; k < CLR_MAX; ++k) {
                     /* if (k == -1) continue; */
                     any = zeroany;
                     any.a_int = (k >= 0) ? k + 1 : k;
                     if (k > 0)
                         add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
                                  c_obj_colors[k], MENU_UNSELECTED);
                     else if (k == -1)
                         add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
                                  "normal", MENU_UNSELECTED);
                     else if (k == -2)
                         add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
                                  "inverse", MENU_UNSELECTED);
                     else if (k == -3)
                         add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
                                  "bold", MENU_UNSELECTED);
                 }
                 end_menu(tmpwin, prompt);
                 if ((res = select_menu(tmpwin, PICK_ONE, &pick2)) > 0) {
                     hltemp[i].coloridx[j] = (pick2->item.a_char > 0)
                                                 ? pick2->item.a_int - 1
                                                 : pick2->item.a_int;
                     free((genericptr_t) pick2);
                 }
                 destroy_nhwindow(tmpwin);
                 if (res < 0)
                     return FALSE;
             }
         }
     }
     buf[0] = '\0';
     for (i = 0; i < MAXBLSTATS; i++) {
         if (field_picks[i]) {
             Sprintf(eos(buf), "%s/%s%s/", fieldids[i].fieldname,
                     (hltemp[i].behavior == BL_TH_UPDOWN)
                         ? "updown"
                         : anything_to_s(thresholdbuf, &hltemp[i].threshold,
                                         blstats[0][i].anytype),
                     (hltemp[i].behavior == BL_TH_VAL_PERCENTAGE) ? "%" : "");
             /* borrow thresholdbuf for use with these last two */
             Sprintf(eos(buf), "%s/",
                     clridx_to_s(thresholdbuf, hltemp[i].coloridx[0]));
             Sprintf(eos(buf), "%s ",
                     clridx_to_s(thresholdbuf, hltemp[i].coloridx[1]));
         }
     }
     return set_status_hilites(buf, FALSE);
 }
 #endif /*STATUS_HILITES*/
 #endif /*STATUS_VIA_WINDOWPORT*/
 
 /*botl.c*/