Source:Rip.c

Below is the full text to src/rip.c from NetHack 3.4.3. To link to a particular line, write [[rip.c#line123 ]], for example. 1.   /*	SCCS Id: @(#)rip.c	3.4	2003/01/08	*/ 2.   /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ 3.    /* NetHack may be freely redistributed. See license for details. */ 4.

5.   #include "hack.h"  6. 7.   STATIC_DCL void FDECL(center, (int, char *)); 8.    9.    extern const char * const killed_by_prefix[];	/* from topten.c */ 10.   11.   #if defined(TTY_GRAPHICS) || defined(X11_GRAPHICS) || defined(GEM_GRAPHICS) || defined(MSWIN_GRAPHICS) 12.  # define TEXT_TOMBSTONE 13.  #endif 14.  #if defined(mac) || defined(__BEOS__) || defined(WIN32_GRAPHICS) 15.  # ifndef TEXT_TOMBSTONE 16.  #  define TEXT_TOMBSTONE 17.  # endif 18.  #endif 19.   20.   #ifdef TEXT_TOMBSTONE 21.   22.   #ifndef NH320_DEDICATION 23.  /* A normal tombstone for end of game display. */ 24.   static const char *rip_txt[] = { 25.  "                       --",  26.   "                      /          \\",  27.   "                     /    REST    \\", 28.  "                    /      IN      \\", 29.  "                   /     PEACE      \\", 30.  "                  /                  \\",  31.   "                  |                  |", /* Name of player */ 32.  "                  |                  |", /* Amount of $ */ 33.  "                  |                  |", /* Type of death */ 34.  "                  |                  |", /* . */  35.   "                  |                  |", /* . */  36.   "                  |                  |", /* . */  37.   "                  |       1001       |", /* Real year of death */ 38.  "                 *|     *  *  *      | *",  39.   "        _________)/\\\\_//(\\/(/\\)/\\//\\/|_)_______",  40.   0  41.   };  42.   #define STONE_LINE_CENT 28	/* char[] element of center of stone face */  43.   #else	/* NH320_DEDICATION */  44.   /* NetHack 3.2.x displayed a dual tombstone as a tribute to Izchak. */  45.   static const char *rip_txt[] = {  46.   "              --                      --",  47.   "             /          \\                    /          \\",  48.   "            /    REST    \\                  /    This    \\",  49.   "           /      IN      \\                /  release of  \\",  50.   "          /     PEACE      \\              /   NetHack is   \\",  51.   "         /                  \\            /   dedicated to   \\",  52.   "         |                  |            |  the memory of   |",  53.   "         |                  |            |                  |", 54.  "         |                  |            |  Izchak Miller   |", 55.  "         |                  |            |   1935 - 1994    |",  56.   "         |                  |            |                  |",  57.   "         |                  |            |     Ascended     |", 58.  "         |       1001       |            |                  |",  59.   "      *  |     *  *  *      | *        * |      *  *  *     | *",  60.   " _____)/\\|\\__//(\\/(/\\)/\\//\\/|_)________)/|\\\\_/_/(\\/(/\\)/\\/\\/|_)____",  61.   0  62.   };  63.   #define STONE_LINE_CENT 19	/* char[] element of center of stone face */ 64.  #endif	/* NH320_DEDICATION */ 65.  #define STONE_LINE_LEN 16	/* # chars that fit on one line 66.  				 * (note 1 ' ' border) 67.  				 */  68.   #define NAME_LINE 6		/* *char[] line # for player name */ 69.  #define GOLD_LINE 7		/* *char[] line # for amount of gold */ 70.  #define DEATH_LINE 8		/* *char[] line # for death description */ 71.  #define YEAR_LINE 12		/* *char[] line # for year */ 72.   73.   static char **rip; 74.   75.   STATIC_OVL void 76.  center(line, text) 77.  int line; 78.  char *text; 79.  {  80.   	register char *ip,*op; 81.  	ip = text; 82.  	op = &rip[line][STONE_LINE_CENT - ((strlen(text)+1)>>1)]; 83.  	while(*ip) *op++ = *ip++; 84.  }  85.    86.    87.   void 88.  genl_outrip(tmpwin, how) 89.  winid tmpwin; 90.  int how; 91.  {  92.   	register char **dp; 93.  	register char *dpx; 94.  	char buf[BUFSZ]; 95.  	register int x;  96. int line; 97.   98.   	rip = dp = (char **) alloc(sizeof(rip_txt)); 99.  	for (x = 0; rip_txt[x]; x++) { 100. 		dp[x] = (char *) alloc((unsigned int)(strlen(rip_txt[x]) + 1)); 101. 		Strcpy(dp[x], rip_txt[x]); 102. 	}  103.  	dp[x] = (char *)0; 104.  105.  	/* Put name on stone */ 106. 	Sprintf(buf, "%s", plname); 107. 	buf[STONE_LINE_LEN] = 0; 108. 	center(NAME_LINE, buf); 109.  110.  	/* Put $ on stone */ 111. #ifndef GOLDOBJ 112. 	Sprintf(buf, "%ld Au", u.ugold); 113. #else 114. 	Sprintf(buf, "%ld Au", done_money); 115. #endif 116. 	buf[STONE_LINE_LEN] = 0; /* It could be a *lot* of gold :-) */  117.  	center(GOLD_LINE, buf);  118.   119.  	/* Put together death description */  120.  	switch (killer_format) {  121.  		default: impossible("bad killer format?");  122.  		case KILLED_BY_AN:  123.  			Strcpy(buf, killed_by_prefix[how]);  124.  			Strcat(buf, an(killer));  125.  			break;  126.  		case KILLED_BY:  127.  			Strcpy(buf, killed_by_prefix[how]);  128.  			Strcat(buf, killer);  129.  			break;  130.  		case NO_KILLER_PREFIX:  131.  			Strcpy(buf, killer);  132.  			break;  133.  	}  134.   135.  	/* Put death type on stone */  136.  	for (line=DEATH_LINE, dpx = buf; line STONE_LINE_LEN) {  141.  				for(i = STONE_LINE_LEN; 142. 				    ((i0 > STONE_LINE_LEN) && i); i--)  143.  					if(dpx[i] == ' ') i0 = i;  144.  				if(!i) i0 = STONE_LINE_LEN;  145.  		}  146.  		tmpchar = dpx[i0];  147.  		dpx[i0] = 0;  148.  		center(line, dpx);  149.  		if (tmpchar != ' ') {  150.  			dpx[i0] = tmpchar;  151.  			dpx= &dpx[i0];  152.  		} else  dpx= &dpx[i0+1];  153.  	}  154.   155.  	/* Put year on stone */  156.  	Sprintf(buf, "%4d", getyear);  157.  	center(YEAR_LINE, buf);  158.   159.  	putstr(tmpwin, 0, "");  160.  	for(*dp; dp++)  161.  		putstr(tmpwin, 0, *dp);  162.   163.  	putstr(tmpwin, 0, "");  164.  	putstr(tmpwin, 0, "");  165.   166.  	for (x = 0; rip_txt[x]; x++) {  167.  		free((genericptr_t)rip[x]);  168.  	}  169.  	free((genericptr_t)rip);  170.  	rip = 0;  171.  }  172.   173.  #endif	/* TEXT_TOMBSTONE */  174.   175.  /*rip.c*/