Subject: bin/8105: [PATCH] Adventure extern/common fixes
To: None <gnats-bugs@gnats.netbsd.org>
From: Joseph Myers <jsm28@cam.ac.uk>
List: netbsd-bugs
Date: 07/28/1999 11:12:34
>Number:         8105
>Category:       bin
>Synopsis:       [PATCH] Adventure extern/common fixes
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    bin-bug-people (Utility Bug People)
>State:          open
>Class:          change-request
>Submitter-Id:   net
>Arrival-Date:   Wed Jul 28 10:20:05 1999
>Last-Modified:
>Originator:     Joseph S. Myers
>Organization:
Trinity College, University of Cambridge, UK
>Release:        NetBSD anoncvs of 1999-07-27
>Environment:
[
System: Linux decomino 2.2.10 #1 Mon Jun 14 07:48:53 UTC 1999 i686 unknown
Architecture: i686
]
>Description:

This patch fixes adventure(6) to use `extern' on declarations of
objects in its header file, and to add corresponding definitions to
init.c accordingly.  (See the C standard - relying on linker commons
where there are multiple uninitialised declarations of an object in
the program traditionally works on Unix, but is not standard C.)

The patch also removes a bit-rotten code fragment under #ifdef
OLDSTUFF.

>How-To-Repeat:

>Fix:

diff -ruN adventure/hdr.h adventure+/hdr.h
--- adventure/hdr.h	Fri Jul 16 01:38:20 1999
+++ adventure+/hdr.h	Tue Jul 27 12:40:58 1999
@@ -60,9 +60,9 @@
 
 #include <signal.h>
 
-int     datfd;			/* message file descriptor */
-volatile sig_atomic_t delhit;
-int     yea;
+extern int     datfd;			/* message file descriptor */
+extern volatile sig_atomic_t delhit;
+extern int     yea;
 extern char data_file[];	/* Virtual data file */
 
 #define TAB     011
@@ -70,81 +70,77 @@
 #define FLUSHLINE do { int flushline_ch; while ((flushline_ch = getchar()) != EOF && flushline_ch != '\n'); } while (0)
 #define FLUSHLF   while (next()!=LF)
 
-int     loc, newloc, oldloc, oldlc2, wzdark, gaveup, kq, k, k2;
-char   *wd1, *wd2;		/* the complete words */
-int     verb, obj, spk;
+extern int     loc, newloc, oldloc, oldlc2, wzdark, gaveup, kq, k, k2;
+extern char   *wd1, *wd2;		/* the complete words */
+extern int     verb, obj, spk;
 extern int blklin;
-int     saveday, savet, mxscor, latncy;
+extern int     saveday, savet, mxscor, latncy;
 
 #define SHORT 50		/* How short is a demo game? */
 
 #define MAXSTR  20		/* max length of user's words */
 
 #define HTSIZE  512		/* max number of vocab words */
-struct hashtab {		/* hash table for vocabulary */
+extern struct hashtab {		/* hash table for vocabulary */
 	int     val;		/* word type &index (ktab) */
 	char   *atab;		/* pointer to actual string */
 }       voc[HTSIZE];
 #define SEED 1815622		/* "Encryption" seed */
 
 struct text
-#ifdef OLDSTUFF
-{
-	int     seekadr;	/* DATFILE must be < 2**16 */
-#endif /* OLDSTUFF */
 	{
 		char   *seekadr;/* Msg start in virtual disk */
 		int     txtlen;	/* length of msg starting here */
 	};
 
 #define RTXSIZ  205
-	struct text rtext[RTXSIZ];	/* random text messages */
+extern	struct text rtext[RTXSIZ];	/* random text messages */
 
 #define MAGSIZ  35
-	struct text mtext[MAGSIZ];	/* magic messages */
+extern	struct text mtext[MAGSIZ];	/* magic messages */
 
-	int     clsses;
+extern	int     clsses;
 #define CLSMAX  12
-	struct text ctext[CLSMAX];	/* classes of adventurer */
-	int     cval[CLSMAX];
+extern	struct text ctext[CLSMAX];	/* classes of adventurer */
+extern	int     cval[CLSMAX];
 
-	struct text ptext[101];		/* object descriptions */
+extern	struct text ptext[101];		/* object descriptions */
 
 #define LOCSIZ  141			/* number of locations */
-	struct text ltext[LOCSIZ];	/* long loc description */
-	struct text stext[LOCSIZ];	/* short loc descriptions */
+extern	struct text ltext[LOCSIZ];	/* long loc description */
+extern	struct text stext[LOCSIZ];	/* short loc descriptions */
 
-	struct travlist {		/* direcs & conditions of travel */
+extern	struct travlist {		/* direcs & conditions of travel */
 		struct travlist *next;	/* ptr to next list entry */
 		int     conditions;	/* m in writeup (newloc / 1000) */
 		int     tloc;		/* n in writeup (newloc % 1000) */
 		int     tverb;		/* the verb that takes you there */
 	}      *travel[LOCSIZ], *tkk;	/* travel is closer to keys(...) */
 
-	int     atloc[LOCSIZ];
+extern	int     atloc[LOCSIZ];
 
-	int     plac[101];		/* initial object placement */
-	int     fixd[101], fixed[101];	/* location fixed? */
+extern	int     plac[101];		/* initial object placement */
+extern	int     fixd[101], fixed[101];	/* location fixed? */
 
-	int     actspk[35];		/* rtext msg for verb <n> */
+extern	int     actspk[35];		/* rtext msg for verb <n> */
 
-	int     cond[LOCSIZ];		/* various condition bits */
+extern	int     cond[LOCSIZ];		/* various condition bits */
 
 	extern int setbit[16];		/* bit defn masks 1,2,4,... */
 
-	int     hntmax;
-	int     hints[20][5];		/* info on hints */
-	int     hinted[20], hintlc[20];
+extern	int     hntmax;
+extern	int     hints[20][5];		/* info on hints */
+extern	int     hinted[20], hintlc[20];
 
-	int     place[101], prop[101], links[201];
-	int     abb[LOCSIZ];
+extern	int     place[101], prop[101], links[201];
+extern	int     abb[LOCSIZ];
 
-	int     maxtrs, tally, tally2;	/* treasure values */
+extern	int     maxtrs, tally, tally2;	/* treasure values */
 
 #define FALSE   0
 #define TRUE    1
 
-	int     keys, lamp, grate, cage, rod, rod2, steps,	/* mnemonics */
+extern	int     keys, lamp, grate, cage, rod, rod2, steps,	/* mnemonics */
 	        bird, door, pillow, snake, fissur, tablet, clam, oyster,
 	        magzin, dwarf, knife, food, bottle, water, oil, plant, plant2,
 	        axe, mirror, dragon, chasm, troll, troll2, bear, messag,
@@ -153,15 +149,15 @@
 	        null, entrnc, dprssn, enter, stream, pour, say, lock, throw,
 	        find, invent;
 
-	int     chloc, chloc2, dseen[7], dloc[7],	/* dwarf stuff */
+extern	int     chloc, chloc2, dseen[7], dloc[7],	/* dwarf stuff */
 	        odloc[7], dflag, daltlc;
 
-	int     tk[21], stick, dtotal, attack;
-	int     turns, lmwarn, iwest, knfloc, detail,	/* various flags and
+extern	int     tk[21], stick, dtotal, attack;
+extern	int     turns, lmwarn, iwest, knfloc, detail,	/* various flags and
 							 * counters */
 	        abbnum, maxdie, numdie, holdng, dkill, foobar, bonus, clock1,
 	        clock2, saved, closng, panic, closed, scorng;
 
-	int     demo, newloc, limit;
+extern	int     demo, newloc, limit;
 
 #define DECR(a,b,c,d,e) decr(a+'+',b+'-',c+'#',d+'&',e+'%')
diff -ruN adventure/init.c adventure+/init.c
--- adventure/init.c	Wed Feb 10 12:38:54 1999
+++ adventure+/init.c	Tue Jul 27 12:41:24 1999
@@ -64,6 +64,70 @@
 int     setbit[16] = {1, 2, 4, 010, 020, 040, 0100, 0200, 0400, 01000, 02000, 04000,
 010000, 020000, 040000, 0100000};
 
+int     datfd;			/* message file descriptor */
+volatile sig_atomic_t delhit;
+int     yea;
+
+int     loc, newloc, oldloc, oldlc2, wzdark, gaveup, kq, k, k2;
+char   *wd1, *wd2;		/* the complete words */
+int     verb, obj, spk;
+int     saveday, savet, mxscor, latncy;
+
+struct hashtab voc[HTSIZE];
+
+struct text rtext[RTXSIZ];	/* random text messages */
+
+struct text mtext[MAGSIZ];	/* magic messages */
+
+int     clsses;
+
+struct text ctext[CLSMAX];	/* classes of adventurer */
+int     cval[CLSMAX];
+
+struct text ptext[101];		/* object descriptions */
+
+struct text ltext[LOCSIZ];	/* long loc description */
+struct text stext[LOCSIZ];	/* short loc descriptions */
+
+struct travlist *travel[LOCSIZ], *tkk;	/* travel is closer to keys(...) */
+
+int     atloc[LOCSIZ];
+
+int     plac[101];		/* initial object placement */
+int     fixd[101], fixed[101];	/* location fixed? */
+
+int     actspk[35];		/* rtext msg for verb <n> */
+
+int     cond[LOCSIZ];		/* various condition bits */
+
+int     hntmax;
+int     hints[20][5];		/* info on hints */
+int     hinted[20], hintlc[20];
+
+int     place[101], prop[101], links[201];
+int     abb[LOCSIZ];
+
+int     maxtrs, tally, tally2;	/* treasure values */
+
+int     keys, lamp, grate, cage, rod, rod2, steps,	/* mnemonics */
+        bird, door, pillow, snake, fissur, tablet, clam, oyster,
+        magzin, dwarf, knife, food, bottle, water, oil, plant, plant2,
+        axe, mirror, dragon, chasm, troll, troll2, bear, messag,
+        vend, batter, nugget, coins, chest, eggs, tridnt, vase,
+        emrald, pyram, pearl, rug, chain, spices, back, look, cave,
+        null, entrnc, dprssn, enter, stream, pour, say, lock, throw,
+        find, invent;
+
+int     chloc, chloc2, dseen[7], dloc[7],	/* dwarf stuff */
+        odloc[7], dflag, daltlc;
+
+int     tk[21], stick, dtotal, attack;
+int     turns, lmwarn, iwest, knfloc, detail,	/* various flags and
+						 * counters */
+        abbnum, maxdie, numdie, holdng, dkill, foobar, bonus, clock1,
+        clock2, saved, closng, panic, closed, scorng;
+
+int     demo, newloc, limit;
 
 void
 init()			/* everything for 1st time run */
>Audit-Trail:
>Unformatted: