Source:NetHack 3.1.0/rip.c

Below is the full text to rip.c from the source code of NetHack 3.1.0. To link to a particular line, write [[NetHack 3.1.0/rip.c#line123 ]], for example.

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

1.   /*	SCCS Id: @(#)rip.c	3.1	91/08/05 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 void FDECL(center, (int, char *)); 8.    9.    extern const char *killed_by_prefix[]; 10.   11.   static const char *rip_txt[] = { 12.  "                       --",  13.   "                      /          \\",  14.   "                     /    REST    \\", 15.  "                    /      IN      \\", 16.  "                   /     PEACE      \\", 17.  "                  /                  \\",  18.   "                  |                  |", /* Name of player */ 19.  "                  |                  |", /* Amount of $ */ 20.  "                  |                  |", /* Type of death */ 21.  "                  |                  |", /* . */  22.   "                  |                  |", /* . */  23.   "                  |                  |", /* . */  24.   "                  |       1001       |", /* Real year of death */ 25.  "                 *|     *  *  *      | *",  26.   "        _________)/\\\\_//(\\/(/\\)/\\//\\/|_)_______",  27.   0  28.   };  29.    30.   #define STONE_LINE_CENT 28	/* char[] element of center of stone face */  31.   #define STONE_LINE_LEN 16	/* # chars that fit on one line  32.   				 * (note 1 ' ' border)  33.   				 */  34.   #define NAME_LINE 6		/* *char[] line # for player name */  35.   #define GOLD_LINE 7		/* *char[] line # for amount of gold */  36.   #define DEATH_LINE 8		/* *char[] line # for death description */  37.   #define YEAR_LINE 12		/* *char[] line # for year */  38.    39.   char **rip;  40.    41.   static void  42.   center(line, text)  43.   int line;  44.   char *text;  45.   {  46.   	register char *ip,*op;  47.   	ip = text;  48.   	op = &rip[line][STONE_LINE_CENT - ((strlen(text)+1)>>1)];  49.   	while(*ip) *op++ = *ip++;  50.   }  51.    52.   void  53. outrip(how, tmpwin) 54.  int how; 55.  winid tmpwin; 56.  {  57.   	register char **dp; 58.  	register char *dpx; 59.  	char buf[BUFSZ]; 60.  	register int x;  61. int line; 62.   63.   	rip = dp = (char **) alloc(sizeof(rip_txt)); 64.  	if (!dp) return; 65.  	for (x = 0; rip_txt[x]; x++) { 66.  		dp[x] = (char *) alloc((unsigned int)(strlen(rip_txt[x]) + 1)); 67.  		if (!dp[x]) return; 68.  		Strcpy(dp[x], rip_txt[x]); 69.  	}  70.   	dp[x] = (char *)0; 71.   72.   	/* Put name on stone */ 73.  	Sprintf(buf, "%s", plname); 74.  	buf[STONE_LINE_LEN] = 0; 75.  	center(NAME_LINE, buf); 76.   77.   	/* Put $ on stone */ 78.  	Sprintf(buf, "%ld Au", u.ugold); 79.  	buf[STONE_LINE_LEN] = 0; /* It could be a *lot* of gold :-) */  80.   	center(GOLD_LINE, buf);  81.    82.   	/* Put together death description */  83.   	switch (killer_format) {  84.   		default: impossible("bad killer format?");  85.   		case KILLED_BY_AN:  86.   			Strcpy(buf, killed_by_prefix[how]);  87.   			Strcat(buf, an(killer));  88.   			break;  89.   		case KILLED_BY:  90.   			Strcpy(buf, killed_by_prefix[how]);  91.   			Strcat(buf, killer);  92.   			break;  93.   		case NO_KILLER_PREFIX:  94.   			Strcpy(buf, killer);  95.   			break;  96.   	}  97.    98.   	/* Put death type on stone */  99.   	for (line=DEATH_LINE, dpx = buf; line STONE_LINE_LEN) {  104.  				for(i = STONE_LINE_LEN; 105. 				    ((i0 > STONE_LINE_LEN) && i); i--)  106.  					if(dpx[i] == ' ') i0 = i;  107.  				if(!i) i0 = STONE_LINE_LEN;  108.  		}  109.  		tmpchar = dpx[i0];  110.  		dpx[i0] = 0;  111.  		center(line, dpx);  112.  		if (tmpchar != ' ') {  113.  			dpx[i0] = tmpchar;  114.  			dpx= &dpx[i0];  115.  		} else  dpx= &dpx[i0+1];  116.  	}  117.   118.  	/* Put year on stone */  119.  	Sprintf(buf, "%4d", getyear);  120.  	center(YEAR_LINE, buf);  121.   122.  	putstr(tmpwin, 0, "");  123.  	for(*dp; dp++)  124.  		putstr(tmpwin, 0, *dp);  125.   126.  	putstr(tmpwin, 0, "");  127.  	putstr(tmpwin, 0, "");  128.  }  129.   130.  /*rip.c*/