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

From NetHackWiki
Jump to navigation Jump to search
(Created page with "__MIXEDSYNTAXHIGHLIGHT__ Below is the full text to '''rip.c''' from the source code of NetHack 3.6.0. To link to a particular line, write S...")
 
m (headaz)
 
(One intermediate revision by the same user not shown)
Line 3: Line 3:
  
 
{{NGPL}}
 
{{NGPL}}
  <span id="line1">1.   /* NetHack 3.6 rip.c $NHDT-Date: 1436753522 2015/07/13 02:12:02 $  $NHDT-Branch: master $:$NHDT-Revision: 1.18 $ */</span>
+
 
  <span id="line2">2.   /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */</span>
+
== Top of file ==
  <span id="line3">3.   /* NetHack may be freely redistributed.  See license for details. */</span>
+
 
  <span id="line4">4.   </span>
+
  <span id="line1">1. /* NetHack 3.6 rip.c $NHDT-Date: 1436753522 2015/07/13 02:12:02 $  $NHDT-Branch: master $:$NHDT-Revision: 1.18 $ */</span>
  <span id="line5">5.   #include "hack.h"</span>
+
  <span id="line2">2. /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */</span>
  <span id="line6">6.   </span>
+
  <span id="line3">3. /* NetHack may be freely redistributed.  See license for details. */</span>
  <span id="line7">7.   STATIC_DCL void FDECL(center, (int, char *));</span>
+
  <span id="line4">4. </span>
  <span id="line8">8.   </span>
+
  <span id="line5">5. #include "hack.h"</span>
  <span id="line9">9.   #if defined(TTY_GRAPHICS) || defined(X11_GRAPHICS) || defined(GEM_GRAPHICS) \</span>
+
  <span id="line6">6. </span>
  <span id="line10">10.       || defined(MSWIN_GRAPHICS)</span>
+
  <span id="line7">7. STATIC_DCL void FDECL(center, (int, char *));</span>
  <span id="line11">11.   #define TEXT_TOMBSTONE</span>
+
  <span id="line8">8. </span>
  <span id="line12">12.   #endif</span>
+
  <span id="line9">9. #if defined(TTY_GRAPHICS) || defined(X11_GRAPHICS) || defined(GEM_GRAPHICS) \</span>
  <span id="line13">13.   #if defined(mac) || defined(__BEOS__) || defined(WIN32_GRAPHICS)</span>
+
  <span id="line10">10.     || defined(MSWIN_GRAPHICS)</span>
  <span id="line14">14.   #ifndef TEXT_TOMBSTONE</span>
+
  <span id="line11">11. #define TEXT_TOMBSTONE</span>
  <span id="line15">15.   #define TEXT_TOMBSTONE</span>
+
  <span id="line12">12. #endif</span>
  <span id="line16">16.   #endif</span>
+
  <span id="line13">13. #if defined(mac) || defined(__BEOS__) || defined(WIN32_GRAPHICS)</span>
  <span id="line17">17.   #endif</span>
+
  <span id="line14">14. #ifndef TEXT_TOMBSTONE</span>
  <span id="line18">18.   </span>
+
  <span id="line15">15. #define TEXT_TOMBSTONE</span>
  <span id="line19">19.   #ifdef TEXT_TOMBSTONE</span>
+
  <span id="line16">16. #endif</span>
  <span id="line20">20.   </span>
+
  <span id="line17">17. #endif</span>
  <span id="line21">21.   #ifndef NH320_DEDICATION</span>
+
  <span id="line18">18. </span>
  <span id="line22">22.   /* A normal tombstone for end of game display. */</span>
+
 
  <span id="line23">23.   static const char *rip_txt[] = {</span>
+
== Tombstone graphics ==
  <span id="line24">24.       "                      ----------",</span>
+
   
  <span id="line25">25.       "                      /          \\",</span>
+
  <span id="line19">19. #ifdef TEXT_TOMBSTONE</span>
  <span id="line26">26.       "                    /    REST    \\",</span>
+
  <span id="line20">20. </span>
  <span id="line27">27.       "                    /      IN      \\",</span>
+
  <span id="line21">21. #ifndef NH320_DEDICATION</span>
  <span id="line28">28.       "                  /    PEACE      \\",</span>
+
  <span id="line22">22. /* A normal tombstone for end of game display. */</span>
  <span id="line29">29.       "                  /                  \\",</span>
+
  <span id="line23">23. static const char *rip_txt[] = {</span>
  <span id="line30">30.       "                  |                  |", /* Name of player */</span>
+
  <span id="line24">24.     "                      ----------",</span>
  <span id="line31">31.       "                  |                  |", /* Amount of $ */</span>
+
  <span id="line25">25.     "                      /          \\",</span>
  <span id="line32">32.       "                  |                  |", /* Type of death */</span>
+
  <span id="line26">26.     "                    /    REST    \\",</span>
  <span id="line33">33.       "                  |                  |", /* . */</span>
+
  <span id="line27">27.     "                    /      IN      \\",</span>
  <span id="line34">34.       "                  |                  |", /* . */</span>
+
  <span id="line28">28.     "                  /    PEACE      \\",</span>
  <span id="line35">35.       "                  |                  |", /* . */</span>
+
  <span id="line29">29.     "                  /                  \\",</span>
  <span id="line36">36.       "                  |      1001      |", /* Real year of death */</span>
+
  <span id="line30">30.     "                  |                  |", /* Name of player */</span>
  <span id="line37">37.       "                *|    *  *  *      | *",</span>
+
  <span id="line31">31.     "                  |                  |", /* Amount of $ */</span>
  <span id="line38">38.       "        _________)/\\\\_//(\\/(/\\)/\\//\\/|_)_______", 0</span>
+
  <span id="line32">32.     "                  |                  |", /* Type of death */</span>
  <span id="line39">39.   };</span>
+
  <span id="line33">33.     "                  |                  |", /* . */</span>
  <span id="line40">40.   #define STONE_LINE_CENT 28 /* char[] element of center of stone face */</span>
+
  <span id="line34">34.     "                  |                  |", /* . */</span>
  <span id="line41">41.   #else                      /* NH320_DEDICATION */</span>
+
  <span id="line35">35.     "                  |                  |", /* . */</span>
  <span id="line42">42.   /* NetHack 3.2.x displayed a dual tombstone as a tribute to Izchak. */</span>
+
  <span id="line36">36.     "                  |      1001      |", /* Real year of death */</span>
  <span id="line43">43.   static const char *rip_txt[] = {</span>
+
  <span id="line37">37.     "                *|    *  *  *      | *",</span>
  <span id="line44">44.       "              ----------                      ----------",</span>
+
  <span id="line38">38.     "        _________)/\\\\_//(\\/(/\\)/\\//\\/|_)_______", 0</span>
  <span id="line45">45.       "            /          \\                    /          \\",</span>
+
  <span id="line39">39. };</span>
  <span id="line46">46.       "            /    REST    \\                  /    This    \\",</span>
+
  <span id="line40">40. #define STONE_LINE_CENT 28 /* char[] element of center of stone face */</span>
  <span id="line47">47.       "          /      IN      \\                /  release of  \\",</span>
+
  <span id="line41">41. #else                      /* NH320_DEDICATION */</span>
  <span id="line48">48.       "          /    PEACE      \\              /  NetHack is  \\",</span>
+
  <span id="line42">42. /* NetHack 3.2.x displayed a dual tombstone as a tribute to Izchak. */</span>
  <span id="line49">49.       "        /                  \\            /  dedicated to  \\",</span>
+
  <span id="line43">43. static const char *rip_txt[] = {</span>
  <span id="line50">50.       "        |                  |            |  the memory of  |",</span>
+
  <span id="line44">44.     "              ----------                      ----------",</span>
  <span id="line51">51.       "        |                  |            |                  |",</span>
+
  <span id="line45">45.     "            /          \\                    /          \\",</span>
  <span id="line52">52.       "        |                  |            |  Izchak Miller  |",</span>
+
  <span id="line46">46.     "            /    REST    \\                  /    This    \\",</span>
  <span id="line53">53.       "        |                  |            |  1935 - 1994    |",</span>
+
  <span id="line47">47.     "          /      IN      \\                /  release of  \\",</span>
  <span id="line54">54.       "        |                  |            |                  |",</span>
+
  <span id="line48">48.     "          /    PEACE      \\              /  NetHack is  \\",</span>
  <span id="line55">55.       "        |                  |            |    Ascended    |",</span>
+
  <span id="line49">49.     "        /                  \\            /  dedicated to  \\",</span>
  <span id="line56">56.       "        |      1001      |            |                  |",</span>
+
  <span id="line50">50.     "        |                  |            |  the memory of  |",</span>
  <span id="line57">57.       "      *  |    *  *  *      | *        * |      *  *  *    | *",</span>
+
  <span id="line51">51.     "        |                  |            |                  |",</span>
  <span id="line58">58.       " _____)/\\|\\__//(\\/(/\\)/\\//\\/|_)________)/|\\\\_/_/(\\/(/\\)/\\/\\/|_)____",</span>
+
  <span id="line52">52.     "        |                  |            |  Izchak Miller  |",</span>
  <span id="line59">59.       0</span>
+
  <span id="line53">53.     "        |                  |            |  1935 - 1994    |",</span>
  <span id="line60">60.   };</span>
+
  <span id="line54">54.     "        |                  |            |                  |",</span>
  <span id="line61">61.   #define STONE_LINE_CENT 19 /* char[] element of center of stone face */</span>
+
  <span id="line55">55.     "        |                  |            |    Ascended    |",</span>
  <span id="line62">62.   #endif                    /* NH320_DEDICATION */</span>
+
  <span id="line56">56.     "        |      1001      |            |                  |",</span>
  <span id="line63">63.   #define STONE_LINE_LEN                              \</span>
+
  <span id="line57">57.     "      *  |    *  *  *      | *        * |      *  *  *    | *",</span>
  <span id="line64">64.       16              /* # chars that fit on one line \</span>
+
  <span id="line58">58.     " _____)/\\|\\__//(\\/(/\\)/\\//\\/|_)________)/|\\\\_/_/(\\/(/\\)/\\/\\/|_)____",</span>
  <span id="line65">65.                         * (note 1 ' ' border)          \</span>
+
  <span id="line59">59.     0</span>
  <span id="line66">66.                         */</span>
+
  <span id="line60">60. };</span>
  <span id="line67">67.   #define NAME_LINE 6  /* *char[] line # for player name */</span>
+
  <span id="line61">61. #define STONE_LINE_CENT 19 /* char[] element of center of stone face */</span>
  <span id="line68">68.   #define GOLD_LINE 7  /* *char[] line # for amount of gold */</span>
+
  <span id="line62">62. #endif                    /* NH320_DEDICATION */</span>
  <span id="line69">69.   #define DEATH_LINE 8 /* *char[] line # for death description */</span>
+
  <span id="line63">63. #define STONE_LINE_LEN                              \</span>
  <span id="line70">70.   #define YEAR_LINE 12 /* *char[] line # for year */</span>
+
  <span id="line64">64.     16              /* # chars that fit on one line \</span>
  <span id="line71">71.   </span>
+
  <span id="line65">65.                       * (note 1 ' ' border)          \</span>
  <span id="line72">72.   static char **rip;</span>
+
  <span id="line66">66.                       */</span>
  <span id="line73">73.   </span>
+
  <span id="line67">67. #define NAME_LINE 6  /* *char[] line # for player name */</span>
<span id="line74">74.   STATIC_OVL void</span>
+
  <span id="line68">68. #define GOLD_LINE 7  /* *char[] line # for amount of gold */</span>
  <span id="line75">75.   center(line, text)</span>
+
  <span id="line69">69. #define DEATH_LINE 8 /* *char[] line # for death description */</span>
  <span id="line76">76.   int line;</span>
+
  <span id="line70">70. #define YEAR_LINE 12 /* *char[] line # for year */</span>
  <span id="line77">77.   char *text;</span>
+
  <span id="line71">71. </span>
  <span id="line78">78.   {</span>
+
  <span id="line72">72. static char **rip;</span>
  <span id="line79">79.       register char *ip, *op;</span>
+
  <span id="line73">73. </span>
  <span id="line80">80.       ip = text;</span>
+
 
  <span id="line81">81.       op = &rip[line][STONE_LINE_CENT - ((strlen(text) + 1) >> 1)];</span>
+
== center ==
  <span id="line82">82.       while (*ip)</span>
+
   
  <span id="line83">83.           *op++ = *ip++;</span>
+
<span id="line74">74. STATIC_OVL void</span>
  <span id="line84">84.   }</span>
+
  <span id="line75">75. center(line, text)</span>
  <span id="line85">85.   </span>
+
  <span id="line76">76. int line;</span>
  <span id="line86">86.   void</span>
+
  <span id="line77">77. char *text;</span>
  <span id="line87">87.   genl_outrip(tmpwin, how, when)</span>
+
  <span id="line78">78. {</span>
  <span id="line88">88.   winid tmpwin;</span>
+
  <span id="line79">79.     register char *ip, *op;</span>
  <span id="line89">89.   int how;</span>
+
  <span id="line80">80.     ip = text;</span>
  <span id="line90">90.   time_t when;</span>
+
  <span id="line81">81.     op = &rip[line][STONE_LINE_CENT - ((strlen(text) + 1) >> 1)];</span>
  <span id="line91">91.   {</span>
+
  <span id="line82">82.     while (*ip)</span>
  <span id="line92">92.       register char **dp;</span>
+
  <span id="line83">83.         *op++ = *ip++;</span>
  <span id="line93">93.       register char *dpx;</span>
+
  <span id="line84">84. }</span>
  <span id="line94">94.       char buf[BUFSZ];</span>
+
  <span id="line85">85. </span>
  <span id="line95">95.       long year;</span>
+
 
  <span id="line96">96.       register int x;</span>
+
== genl_outrip ==
  <span id="line97">97.       int line;</span>
+
   
  <span id="line98">98.   </span>
+
  <span id="line86">86. void</span>
  <span id="line99">99.       rip = dp = (char **) alloc(sizeof(rip_txt));</span>
+
  <span id="line87">87. genl_outrip(tmpwin, how, when)</span>
  <span id="line100">100.     for (x = 0; rip_txt[x]; ++x)</span>
+
  <span id="line88">88. winid tmpwin;</span>
  <span id="line101">101.         dp[x] = dupstr(rip_txt[x]);</span>
+
  <span id="line89">89. int how;</span>
  <span id="line102">102.     dp[x] = (char *) 0;</span>
+
  <span id="line90">90. time_t when;</span>
  <span id="line103">103. </span>
+
  <span id="line91">91. {</span>
  <span id="line104">104.     /* Put name on stone */</span>
+
  <span id="line92">92.     register char **dp;</span>
  <span id="line105">105.     Sprintf(buf, "%s", plname);</span>
+
  <span id="line93">93.     register char *dpx;</span>
  <span id="line106">106.     buf[STONE_LINE_LEN] = 0;</span>
+
  <span id="line94">94.     char buf[BUFSZ];</span>
  <span id="line107">107.     center(NAME_LINE, buf);</span>
+
  <span id="line95">95.     long year;</span>
  <span id="line108">108. </span>
+
  <span id="line96">96.     register int x;</span>
  <span id="line109">109.     /* Put $ on stone */</span>
+
  <span id="line97">97.     int line;</span>
  <span id="line110">110.     Sprintf(buf, "%ld Au", done_money);</span>
+
  <span id="line98">98. </span>
  <span id="line111">111.     buf[STONE_LINE_LEN] = 0; /* It could be a *lot* of gold :-) */</span>
+
  <span id="line99">99.     rip = dp = (char **) alloc(sizeof(rip_txt));</span>
  <span id="line112">112.     center(GOLD_LINE, buf);</span>
+
  <span id="line100">100.     for (x = 0; rip_txt[x]; ++x)</span>
  <span id="line113">113. </span>
+
  <span id="line101">101.         dp[x] = dupstr(rip_txt[x]);</span>
  <span id="line114">114.     /* Put together death description */</span>
+
  <span id="line102">102.     dp[x] = (char *) 0;</span>
  <span id="line115">115.     formatkiller(buf, sizeof buf, how);</span>
+
  <span id="line103">103. </span>
  <span id="line116">116. </span>
+
  <span id="line104">104.     /* Put name on stone */</span>
  <span id="line117">117.     /* Put death type on stone */</span>
+
  <span id="line105">105.     Sprintf(buf, "%s", plname);</span>
  <span id="line118">118.     for (line = DEATH_LINE, dpx = buf; line < YEAR_LINE; line++) {</span>
+
  <span id="line106">106.     buf[STONE_LINE_LEN] = 0;</span>
  <span id="line119">119.         register int i, i0;</span>
+
  <span id="line107">107.     center(NAME_LINE, buf);</span>
  <span id="line120">120.         char tmpchar;</span>
+
  <span id="line108">108. </span>
  <span id="line121">121. </span>
+
  <span id="line109">109.     /* Put $ on stone */</span>
  <span id="line122">122.         if ((i0 = strlen(dpx)) > STONE_LINE_LEN) {</span>
+
  <span id="line110">110.     Sprintf(buf, "%ld Au", done_money);</span>
  <span id="line123">123.             for (i = STONE_LINE_LEN; ((i0 > STONE_LINE_LEN) && i); i--)</span>
+
  <span id="line111">111.     buf[STONE_LINE_LEN] = 0; /* It could be a *lot* of gold :-) */</span>
  <span id="line124">124.                 if (dpx[i] == ' ')</span>
+
  <span id="line112">112.     center(GOLD_LINE, buf);</span>
  <span id="line125">125.                     i0 = i;</span>
+
  <span id="line113">113. </span>
  <span id="line126">126.             if (!i)</span>
+
  <span id="line114">114.     /* Put together death description */</span>
  <span id="line127">127.                 i0 = STONE_LINE_LEN;</span>
+
  <span id="line115">115.     formatkiller(buf, sizeof buf, how);</span>
  <span id="line128">128.         }</span>
+
  <span id="line116">116. </span>
  <span id="line129">129.         tmpchar = dpx[i0];</span>
+
  <span id="line117">117.     /* Put death type on stone */</span>
  <span id="line130">130.         dpx[i0] = 0;</span>
+
  <span id="line118">118.     for (line = DEATH_LINE, dpx = buf; line < YEAR_LINE; line++) {</span>
  <span id="line131">131.         center(line, dpx);</span>
+
  <span id="line119">119.         register int i, i0;</span>
  <span id="line132">132.         if (tmpchar != ' ') {</span>
+
  <span id="line120">120.         char tmpchar;</span>
  <span id="line133">133.             dpx[i0] = tmpchar;</span>
+
  <span id="line121">121. </span>
  <span id="line134">134.             dpx = &dpx[i0];</span>
+
  <span id="line122">122.         if ((i0 = strlen(dpx)) > STONE_LINE_LEN) {</span>
  <span id="line135">135.         } else</span>
+
  <span id="line123">123.             for (i = STONE_LINE_LEN; ((i0 > STONE_LINE_LEN) && i); i--)</span>
  <span id="line136">136.             dpx = &dpx[i0 + 1];</span>
+
  <span id="line124">124.                 if (dpx[i] == ' ')</span>
  <span id="line137">137.     }</span>
+
  <span id="line125">125.                     i0 = i;</span>
  <span id="line138">138. </span>
+
  <span id="line126">126.             if (!i)</span>
  <span id="line139">139.     /* Put year on stone */</span>
+
  <span id="line127">127.                 i0 = STONE_LINE_LEN;</span>
  <span id="line140">140.     year = yyyymmdd(when) / 10000L;</span>
+
  <span id="line128">128.         }</span>
  <span id="line141">141.     Sprintf(buf, "%4ld", year);</span>
+
  <span id="line129">129.         tmpchar = dpx[i0];</span>
  <span id="line142">142.     center(YEAR_LINE, buf);</span>
+
  <span id="line130">130.         dpx[i0] = 0;</span>
  <span id="line143">143. </span>
+
  <span id="line131">131.         center(line, dpx);</span>
  <span id="line144">144.     putstr(tmpwin, 0, "");</span>
+
  <span id="line132">132.         if (tmpchar != ' ') {</span>
  <span id="line145">145.     for (; *dp; dp++)</span>
+
  <span id="line133">133.             dpx[i0] = tmpchar;</span>
  <span id="line146">146.         putstr(tmpwin, 0, *dp);</span>
+
  <span id="line134">134.             dpx = &dpx[i0];</span>
  <span id="line147">147. </span>
+
  <span id="line135">135.         } else</span>
  <span id="line148">148.     putstr(tmpwin, 0, "");</span>
+
  <span id="line136">136.             dpx = &dpx[i0 + 1];</span>
  <span id="line149">149.     putstr(tmpwin, 0, "");</span>
+
  <span id="line137">137.     }</span>
  <span id="line150">150. </span>
+
  <span id="line138">138. </span>
  <span id="line151">151.     for (x = 0; rip_txt[x]; x++) {</span>
+
  <span id="line139">139.     /* Put year on stone */</span>
  <span id="line152">152.         free((genericptr_t) rip[x]);</span>
+
  <span id="line140">140.     year = yyyymmdd(when) / 10000L;</span>
  <span id="line153">153.     }</span>
+
  <span id="line141">141.     Sprintf(buf, "%4ld", year);</span>
  <span id="line154">154.     free((genericptr_t) rip);</span>
+
  <span id="line142">142.     center(YEAR_LINE, buf);</span>
  <span id="line155">155.     rip = 0;</span>
+
  <span id="line143">143. </span>
  <span id="line156">156. }</span>
+
  <span id="line144">144.     putstr(tmpwin, 0, "");</span>
  <span id="line157">157. </span>
+
  <span id="line145">145.     for (; *dp; dp++)</span>
  <span id="line158">158. #endif /* TEXT_TOMBSTONE */</span>
+
  <span id="line146">146.         putstr(tmpwin, 0, *dp);</span>
  <span id="line159">159. </span>
+
  <span id="line147">147. </span>
  <span id="line160">160. /*rip.c*/</span>
+
  <span id="line148">148.     putstr(tmpwin, 0, "");</span>
 +
  <span id="line149">149.     putstr(tmpwin, 0, "");</span>
 +
  <span id="line150">150. </span>
 +
  <span id="line151">151.     for (x = 0; rip_txt[x]; x++) {</span>
 +
  <span id="line152">152.         free((genericptr_t) rip[x]);</span>
 +
  <span id="line153">153.     }</span>
 +
  <span id="line154">154.     free((genericptr_t) rip);</span>
 +
  <span id="line155">155.     rip = 0;</span>
 +
  <span id="line156">156. }</span>
 +
  <span id="line157">157. </span>
 +
  <span id="line158">158. #endif /* TEXT_TOMBSTONE */</span>
 +
  <span id="line159">159. </span>
 +
  <span id="line160">160. /*rip.c*/</span>
 
[[Category:NetHack 3.6.0 source code|src/rip.c]]
 
[[Category:NetHack 3.6.0 source code|src/rip.c]]

Latest revision as of 02:48, 21 December 2015

Below is the full text to rip.c from the source code of NetHack 3.6.0. To link to a particular line, write [[Source:NetHack 3.6.0/src/rip.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	rip.c	$NHDT-Date: 1436753522 2015/07/13 02:12:02 $  $NHDT-Branch: master $:$NHDT-Revision: 1.18 $ */
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
 #include "hack.h"
 
 STATIC_DCL void FDECL(center, (int, char *));
 
 #if defined(TTY_GRAPHICS) || defined(X11_GRAPHICS) || defined(GEM_GRAPHICS) \
     || defined(MSWIN_GRAPHICS)
 #define TEXT_TOMBSTONE
 #endif
 #if defined(mac) || defined(__BEOS__) || defined(WIN32_GRAPHICS)
 #ifndef TEXT_TOMBSTONE
 #define TEXT_TOMBSTONE
 #endif
 #endif
 

Tombstone graphics

 #ifdef TEXT_TOMBSTONE
 
 #ifndef NH320_DEDICATION
 /* A normal tombstone for end of game display. */
 static const char *rip_txt[] = {
     "                       ----------",
     "                      /          \\",
     "                     /    REST    \\",
     "                    /      IN      \\",
     "                   /     PEACE      \\",
     "                  /                  \\",
     "                  |                  |", /* Name of player */
     "                  |                  |", /* Amount of $ */
     "                  |                  |", /* Type of death */
     "                  |                  |", /* . */
     "                  |                  |", /* . */
     "                  |                  |", /* . */
     "                  |       1001       |", /* Real year of death */
     "                 *|     *  *  *      | *",
     "        _________)/\\\\_//(\\/(/\\)/\\//\\/|_)_______", 0
 };
 #define STONE_LINE_CENT 28 /* char[] element of center of stone face */
 #else                      /* NH320_DEDICATION */
 /* NetHack 3.2.x displayed a dual tombstone as a tribute to Izchak. */
 static const char *rip_txt[] = {
     "              ----------                      ----------",
     "             /          \\                    /          \\",
     "            /    REST    \\                  /    This    \\",
     "           /      IN      \\                /  release of  \\",
     "          /     PEACE      \\              /   NetHack is   \\",
     "         /                  \\            /   dedicated to   \\",
     "         |                  |            |  the memory of   |",
     "         |                  |            |                  |",
     "         |                  |            |  Izchak Miller   |",
     "         |                  |            |   1935 - 1994    |",
     "         |                  |            |                  |",
     "         |                  |            |     Ascended     |",
     "         |       1001       |            |                  |",
     "      *  |     *  *  *      | *        * |      *  *  *     | *",
     " _____)/\\|\\__//(\\/(/\\)/\\//\\/|_)________)/|\\\\_/_/(\\/(/\\)/\\/\\/|_)____",
     0
 };
 #define STONE_LINE_CENT 19 /* char[] element of center of stone face */
 #endif                     /* NH320_DEDICATION */
 #define STONE_LINE_LEN                               \
     16               /* # chars that fit on one line \
                       * (note 1 ' ' border)          \
                       */
 #define NAME_LINE 6  /* *char[] line # for player name */
 #define GOLD_LINE 7  /* *char[] line # for amount of gold */
 #define DEATH_LINE 8 /* *char[] line # for death description */
 #define YEAR_LINE 12 /* *char[] line # for year */
 
 static char **rip;
 

center

 STATIC_OVL void
 center(line, text)
 int line;
 char *text;
 {
     register char *ip, *op;
     ip = text;
     op = &rip[line][STONE_LINE_CENT - ((strlen(text) + 1) >> 1)];
     while (*ip)
         *op++ = *ip++;
 }
 

genl_outrip

 void
 genl_outrip(tmpwin, how, when)
 winid tmpwin;
 int how;
 time_t when;
 {
     register char **dp;
     register char *dpx;
     char buf[BUFSZ];
     long year;
     register int x;
     int line;
 
     rip = dp = (char **) alloc(sizeof(rip_txt));
     for (x = 0; rip_txt[x]; ++x)
         dp[x] = dupstr(rip_txt[x]);
     dp[x] = (char *) 0;
 
     /* Put name on stone */
     Sprintf(buf, "%s", plname);
     buf[STONE_LINE_LEN] = 0;
     center(NAME_LINE, buf);
 
     /* Put $ on stone */
     Sprintf(buf, "%ld Au", done_money);
     buf[STONE_LINE_LEN] = 0; /* It could be a *lot* of gold :-) */
     center(GOLD_LINE, buf);
 
     /* Put together death description */
     formatkiller(buf, sizeof buf, how);
 
     /* Put death type on stone */
     for (line = DEATH_LINE, dpx = buf; line < YEAR_LINE; line++) {
         register int i, i0;
         char tmpchar;
 
         if ((i0 = strlen(dpx)) > STONE_LINE_LEN) {
             for (i = STONE_LINE_LEN; ((i0 > STONE_LINE_LEN) && i); i--)
                 if (dpx[i] == ' ')
                     i0 = i;
             if (!i)
                 i0 = STONE_LINE_LEN;
         }
         tmpchar = dpx[i0];
         dpx[i0] = 0;
         center(line, dpx);
         if (tmpchar != ' ') {
             dpx[i0] = tmpchar;
             dpx = &dpx[i0];
         } else
             dpx = &dpx[i0 + 1];
     }
 
     /* Put year on stone */
     year = yyyymmdd(when) / 10000L;
     Sprintf(buf, "%4ld", year);
     center(YEAR_LINE, buf);
 
     putstr(tmpwin, 0, "");
     for (; *dp; dp++)
         putstr(tmpwin, 0, *dp);
 
     putstr(tmpwin, 0, "");
     putstr(tmpwin, 0, "");
 
     for (x = 0; rip_txt[x]; x++) {
         free((genericptr_t) rip[x]);
     }
     free((genericptr_t) rip);
     rip = 0;
 }
 
 #endif /* TEXT_TOMBSTONE */
 
 /*rip.c*/