OSDN Git Service

use const
[jnethack/source.git] / src / decl.c
1 /* NetHack 3.6  decl.c  $NHDT-Date: 1446975463 2015/11/08 09:37:43 $  $NHDT-Branch: master $:$NHDT-Revision: 1.62 $ */
2 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
3 /*-Copyright (c) Michael Allison, 2009. */
4 /* NetHack may be freely redistributed.  See license for details. */
5
6 #include "hack.h"
7
8 int NDECL((*afternmv));
9 int NDECL((*occupation));
10
11 /* from xxxmain.c */
12 const char *hname = 0; /* name of the game (argv[0] of main) */
13 int hackpid = 0;       /* current process id */
14 #if defined(UNIX) || defined(VMS)
15 int locknum = 0; /* max num of simultaneous users */
16 #endif
17 #ifdef DEF_PAGER
18 char *catmore = 0; /* default pager */
19 #endif
20
21 NEARDATA int bases[MAXOCLASSES] = DUMMY;
22
23 NEARDATA int multi = 0;
24 const char *multi_reason = NULL;
25 NEARDATA int nroom = 0;
26 NEARDATA int nsubroom = 0;
27 NEARDATA int occtime = 0;
28
29 /* maze limits must be even; masking off lowest bit guarantees that */
30 int x_maze_max = (COLNO - 1) & ~1, y_maze_max = (ROWNO - 1) & ~1;
31
32 int otg_temp; /* used by object_to_glyph() [otg] */
33
34 NEARDATA int in_doagain = 0;
35
36 /*
37  *      The following structure will be initialized at startup time with
38  *      the level numbers of some "important" things in the game.
39  */
40 struct dgn_topology dungeon_topology = { DUMMY };
41
42 struct q_score quest_status = DUMMY;
43
44 NEARDATA int warn_obj_cnt = 0;
45 NEARDATA int smeq[MAXNROFROOMS + 1] = DUMMY;
46 NEARDATA int doorindex = 0;
47 NEARDATA char *save_cm = 0;
48
49 NEARDATA struct kinfo killer = DUMMY;
50 NEARDATA long done_money = 0;
51 const char *nomovemsg = 0;
52 NEARDATA char plname[PL_NSIZ] = DUMMY; /* player name */
53 NEARDATA char pl_character[PL_CSIZ] = DUMMY;
54 NEARDATA char pl_race = '\0';
55
56 NEARDATA char pl_fruit[PL_FSIZ] = DUMMY;
57 NEARDATA struct fruit *ffruit = (struct fruit *) 0;
58
59 NEARDATA char tune[6] = DUMMY;
60
61 const char *occtxt = DUMMY;
62 const char quitchars[] = " \r\n\033";
63 const char vowels[] = "aeiouAEIOU";
64 const char ynchars[] = "yn";
65 const char ynqchars[] = "ynq";
66 const char ynaqchars[] = "ynaq";
67 const char ynNaqchars[] = "yn#aq";
68 NEARDATA long yn_number = 0L;
69
70 const char disclosure_options[] = "iavgco";
71
72 #if defined(MICRO) || defined(WIN32)
73 char hackdir[PATHLEN]; /* where rumors, help, record are */
74 #ifdef MICRO
75 char levels[PATHLEN]; /* where levels are */
76 #endif
77 #endif /* MICRO || WIN32 */
78
79 #ifdef MFLOPPY
80 char permbones[PATHLEN]; /* where permanent copy of bones go */
81 int ramdisk = FALSE;     /* whether to copy bones to levels or not */
82 int saveprompt = TRUE;
83 const char *alllevels = "levels.*";
84 const char *allbones = "bones*.*";
85 #endif
86
87 struct linfo level_info[MAXLINFO];
88
89 NEARDATA struct sinfo program_state;
90
91 /* x/y/z deltas for the 10 movement directions (8 compass pts, 2 up/down) */
92 const schar xdir[10] = { -1, -1, 0, 1, 1, 1, 0, -1, 0, 0 };
93 const schar ydir[10] = { 0, -1, -1, -1, 0, 1, 1, 1, 0, 0 };
94 const schar zdir[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, -1 };
95
96 NEARDATA schar tbx = 0, tby = 0; /* mthrowu: target */
97
98 /* for xname handling of multiple shot missile volleys:
99    number of shots, index of current one, validity check, shoot vs throw */
100 NEARDATA struct multishot m_shot = { 0, 0, STRANGE_OBJECT, FALSE };
101
102 NEARDATA dungeon dungeons[MAXDUNGEON]; /* ini'ed by init_dungeon() */
103 NEARDATA s_level *sp_levchn;
104 NEARDATA stairway upstair = { 0, 0, { 0, 0 }, 0 },
105                   dnstair = { 0, 0, { 0, 0 }, 0 };
106 NEARDATA stairway upladder = { 0, 0, { 0, 0 }, 0 },
107                   dnladder = { 0, 0, { 0, 0 }, 0 };
108 NEARDATA stairway sstairs = { 0, 0, { 0, 0 }, 0 };
109 NEARDATA dest_area updest = { 0, 0, 0, 0, 0, 0, 0, 0 };
110 NEARDATA dest_area dndest = { 0, 0, 0, 0, 0, 0, 0, 0 };
111 NEARDATA coord inv_pos = { 0, 0 };
112
113 NEARDATA boolean defer_see_monsters = FALSE;
114 NEARDATA boolean in_mklev = FALSE;
115 NEARDATA boolean stoned = FALSE; /* done to monsters hit by 'c' */
116 NEARDATA boolean unweapon = FALSE;
117 NEARDATA boolean mrg_to_wielded = FALSE;
118 /* weapon picked is merged with wielded one */
119
120 NEARDATA boolean in_steed_dismounting = FALSE;
121
122 NEARDATA coord bhitpos = DUMMY;
123 NEARDATA coord doors[DOORMAX] = { DUMMY };
124
125 NEARDATA struct mkroom rooms[(MAXNROFROOMS + 1) * 2] = { DUMMY };
126 NEARDATA struct mkroom *subrooms = &rooms[MAXNROFROOMS + 1];
127 struct mkroom *upstairs_room, *dnstairs_room, *sstairs_room;
128
129 dlevel_t level; /* level map */
130 struct trap *ftrap = (struct trap *) 0;
131 NEARDATA struct monst youmonst = DUMMY;
132 NEARDATA struct context_info context = DUMMY;
133 NEARDATA struct flag flags = DUMMY;
134 #ifdef SYSFLAGS
135 NEARDATA struct sysflag sysflags = DUMMY;
136 #endif
137 NEARDATA struct instance_flags iflags = DUMMY;
138 NEARDATA struct you u = DUMMY;
139 NEARDATA time_t ubirthday = DUMMY;
140 NEARDATA struct u_realtime urealtime = DUMMY;
141
142 schar lastseentyp[COLNO][ROWNO] = {
143     DUMMY
144 }; /* last seen/touched dungeon typ */
145
146 NEARDATA struct obj
147     *invent = (struct obj *) 0,
148     *uwep = (struct obj *) 0, *uarm = (struct obj *) 0,
149     *uswapwep = (struct obj *) 0,
150     *uquiver = (struct obj *) 0,       /* quiver */
151         *uarmu = (struct obj *) 0,     /* under-wear, so to speak */
152             *uskin = (struct obj *) 0, /* dragon armor, if a dragon */
153                 *uarmc = (struct obj *) 0, *uarmh = (struct obj *) 0,
154     *uarms = (struct obj *) 0, *uarmg = (struct obj *) 0,
155     *uarmf = (struct obj *) 0, *uamul = (struct obj *) 0,
156     *uright = (struct obj *) 0, *uleft = (struct obj *) 0,
157     *ublindf = (struct obj *) 0, *uchain = (struct obj *) 0,
158     *uball = (struct obj *) 0;
159 /* some objects need special handling during destruction or placement */
160 NEARDATA struct obj
161     *current_wand = 0,  /* wand currently zapped/applied */
162     *thrownobj = 0,     /* object in flight due to throwing */
163     *kickedobj = 0;     /* object in flight due to kicking */
164
165 #ifdef TEXTCOLOR
166 /*
167  *  This must be the same order as used for buzz() in zap.c.
168  */
169 const int zapcolors[NUM_ZAP] = {
170     HI_ZAP,     /* 0 - missile */
171     CLR_ORANGE, /* 1 - fire */
172     CLR_WHITE,  /* 2 - frost */
173     HI_ZAP,     /* 3 - sleep */
174     CLR_BLACK,  /* 4 - death */
175     CLR_WHITE,  /* 5 - lightning */
176     CLR_YELLOW, /* 6 - poison gas */
177     CLR_GREEN,  /* 7 - acid */
178 };
179 #endif /* text color */
180
181 const int shield_static[SHIELD_COUNT] = {
182     S_ss1, S_ss2, S_ss3, S_ss2, S_ss1, S_ss2, S_ss4, /* 7 per row */
183     S_ss1, S_ss2, S_ss3, S_ss2, S_ss1, S_ss2, S_ss4,
184     S_ss1, S_ss2, S_ss3, S_ss2, S_ss1, S_ss2, S_ss4,
185 };
186
187 NEARDATA struct spell spl_book[MAXSPELL + 1] = { DUMMY };
188
189 NEARDATA long moves = 1L, monstermoves = 1L;
190 /* These diverge when player is Fast */
191 NEARDATA long wailmsg = 0L;
192
193 /* objects that are moving to another dungeon level */
194 NEARDATA struct obj *migrating_objs = (struct obj *) 0;
195 /* objects not yet paid for */
196 NEARDATA struct obj *billobjs = (struct obj *) 0;
197
198 /* used to zero all elements of a struct obj and a struct monst */
199 NEARDATA struct obj zeroobj = DUMMY;
200 NEARDATA struct monst zeromonst = DUMMY;
201 /* used to zero out union any; initializer deliberately omitted */
202 NEARDATA anything zeroany;
203
204 /* originally from dog.c */
205 NEARDATA char dogname[PL_PSIZ] = DUMMY;
206 NEARDATA char catname[PL_PSIZ] = DUMMY;
207 NEARDATA char horsename[PL_PSIZ] = DUMMY;
208 char preferred_pet; /* '\0', 'c', 'd', 'n' (none) */
209 /* monsters that went down/up together with @ */
210 NEARDATA struct monst *mydogs = (struct monst *) 0;
211 /* monsters that are moving to another dungeon level */
212 NEARDATA struct monst *migrating_mons = (struct monst *) 0;
213
214 NEARDATA struct mvitals mvitals[NUMMONS];
215
216 #if 0 /*JP*/
217 NEARDATA struct c_color_names c_color_names = {
218     "black",  "amber", "golden", "light blue", "red",   "green",
219     "silver", "blue",  "purple", "white",      "orange"
220 };
221 #else
222 NEARDATA struct c_color_names c_color_names = {
223     "\8d\95\82¢",   "àæàß\90F\82Ì", "\8bà\90F\82Ì", "\90\85\90F\82Ì", "\90Ô\82¢", "\97Î\90F\82Ì",
224     "\8bâ\90F\82Ì", "\90Â\82¢",     "\8e\87\90F\82Ì", "\94\92\82¢",   "\9eò\90F\82Ì"
225 };
226 #endif
227
228 struct menucoloring *menu_colorings = NULL;
229
230 const char *c_obj_colors[] = {
231 #if 0 /*JP*/
232     "black",          /* CLR_BLACK */
233     "red",            /* CLR_RED */
234     "green",          /* CLR_GREEN */
235     "brown",          /* CLR_BROWN */
236     "blue",           /* CLR_BLUE */
237     "magenta",        /* CLR_MAGENTA */
238     "cyan",           /* CLR_CYAN */
239     "gray",           /* CLR_GRAY */
240     "transparent",    /* no_color */
241     "orange",         /* CLR_ORANGE */
242     "bright green",   /* CLR_BRIGHT_GREEN */
243     "yellow",         /* CLR_YELLOW */
244     "bright blue",    /* CLR_BRIGHT_BLUE */
245     "bright magenta", /* CLR_BRIGHT_MAGENTA */
246     "bright cyan",    /* CLR_BRIGHT_CYAN */
247     "white",          /* CLR_WHITE */
248 #else
249     "\8d\95\82¢",           /* CLR_BLACK */
250     "\90Ô\82¢",           /* CLR_RED */
251     "\97Î\90F\82Ì",         /* CLR_GREEN */
252     "\92\83\90F\82Ì",         /* CLR_BROWN */
253     "\90Â\82¢",           /* CLR_BLUE */
254     "\83}\83[\83\93\83^\90F\82Ì",   /* CLR_MAGENTA */
255     "\83V\83A\83\93\90F\82Ì",     /* CLR_CYAN */
256     "\8aD\90F\82Ì",         /* CLR_GRAY */
257     "\93§\96¾\82È",         /* no_color */
258     "\9eò\90F\82Ì",         /* CLR_ORANGE */
259     "\96¾\82é\82¢\97Î\90F\82Ì",   /* CLR_BRIGHT_GREEN */
260     "\89©\90F\82Ì",         /* CLR_YELLOW */
261     "\96¾\82é\82¢\90Â\90F\82Ì",   /* CLR_BRIGHT_BLUE */
262     "\96¾\82é\82¢\83}\83[\83\93\83^\90F\82Ì", /* CLR_BRIGHT_MAGENTA */
263     "\96¾\82é\82¢\83V\83A\83\93\90F\82Ì", /* CLR_BRIGHT_CYAN */
264     "\94\92\82¢",           /* CLR_WHITE */
265 #endif
266 };
267
268 #if 0 /*JP*/
269 struct c_common_strings c_common_strings = { "Nothing happens.",
270                                              "That's enough tries!",
271                                              "That is a silly thing to %s.",
272                                              "shudder for a moment.",
273                                              "something",
274                                              "Something",
275                                              "You can move again.",
276                                              "Never mind.",
277                                              "vision quickly clears.",
278                                              { "the", "your" } };
279 #else
280 struct c_common_strings c_common_strings = { "\89½\82à\8bN\82«\82È\82©\82Á\82½\81D",
281                                              "\82¢\82¢\89Á\8c¸\82É\82µ\82ë\81I",
282                                              "%s\81H\82»\82è\82á\82Î\82©\82°\82Ä\82¢\82é\81D",
283                                              "\88ê\8fu\90k\82¦\82½\81D",
284                                              "\89½\82©",
285                                              "\89½\82©",
286                                              "\82Ü\82½\93®\82¯\82é\82æ\82¤\82É\82È\82Á\82½\81D",
287                                              "\82¦\81H",
288                                              "\8e\8b\8aE\82ª\82Í\82Á\82«\82è\82µ\82½\81D",
289                                              { "", "\82 \82È\82½\82Ì" } };
290 #endif
291
292 /* NOTE: the order of these words exactly corresponds to the
293    order of oc_material values #define'd in objclass.h. */
294 #if 0 /*JP*/
295 const char *materialnm[] = { "mysterious", "liquid",  "wax",        "organic",
296                              "flesh",      "paper",   "cloth",      "leather",
297                              "wooden",     "bone",    "dragonhide", "iron",
298                              "metal",      "copper",  "silver",     "gold",
299                              "platinum",   "mithril", "plastic",    "glass",
300                              "gemstone",   "stone" };
301 #else
302 const char *materialnm[] = { "\90_\94é", "\89t\8fó", "\98X",   "\97L\8b@",
303                              "\93÷",   "\8e\86",   "\95z",   "\8av",
304                              "\96Ø",   "\8d\9c",   "\97³\94ç", "\93S",
305                              "\8bà\91®", "\93º",   "\94\92\8bâ", "\8bà",
306                              "\83v\83\89\83`\83i", "\83~\83X\83\8a\83\8b", "\83v\83\89\83X\83`\83b\83N", "\83K\83\89\83X",
307                              "\95ó\90Î", "\90Î" };
308 #endif
309
310 /* Vision */
311 NEARDATA boolean vision_full_recalc = 0;
312 NEARDATA char **viz_array = 0; /* used in cansee() and couldsee() macros */
313
314 /* Global windowing data, defined here for multi-window-system support */
315 NEARDATA winid WIN_MESSAGE = WIN_ERR;
316 NEARDATA winid WIN_STATUS = WIN_ERR;
317 NEARDATA winid WIN_MAP = WIN_ERR, WIN_INVEN = WIN_ERR;
318 char toplines[TBUFSZ];
319 /* Windowing stuff that's really tty oriented, but present for all ports */
320 struct tc_gbl_data tc_gbl_data = { 0, 0, 0, 0 }; /* AS,AE, LI,CO */
321
322 char *fqn_prefix[PREFIX_COUNT] = { (char *) 0, (char *) 0, (char *) 0,
323                                    (char *) 0, (char *) 0, (char *) 0,
324                                    (char *) 0, (char *) 0, (char *) 0,
325                                    (char *) 0 };
326
327 #ifdef PREFIXES_IN_USE
328 char *fqn_prefix_names[PREFIX_COUNT] = {
329     "hackdir",  "leveldir", "savedir",    "bonesdir",  "datadir",
330     "scoredir", "lockdir",  "sysconfdir", "configdir", "troubledir"
331 };
332 #endif
333
334 NEARDATA struct savefile_info sfcap = {
335 #ifdef NHSTDC
336     0x00000000UL
337 #else
338     0x00000000L
339 #endif
340 #if defined(COMPRESS) || defined(ZLIB_COMP)
341         | SFI1_EXTERNALCOMP
342 #endif
343 #if defined(ZEROCOMP)
344         | SFI1_ZEROCOMP
345 #endif
346 #if defined(RLECOMP)
347         | SFI1_RLECOMP
348 #endif
349     ,
350 #ifdef NHSTDC
351     0x00000000UL, 0x00000000UL
352 #else
353     0x00000000L, 0x00000000L
354 #endif
355 };
356
357 NEARDATA struct savefile_info sfrestinfo, sfsaveinfo = {
358 #ifdef NHSTDC
359     0x00000000UL
360 #else
361     0x00000000L
362 #endif
363 #if defined(COMPRESS) || defined(ZLIB_COMP)
364         | SFI1_EXTERNALCOMP
365 #endif
366 #if defined(ZEROCOMP)
367         | SFI1_ZEROCOMP
368 #endif
369 #if defined(RLECOMP)
370         | SFI1_RLECOMP
371 #endif
372     ,
373 #ifdef NHSTDC
374     0x00000000UL, 0x00000000UL
375 #else
376     0x00000000L, 0x00000000L
377 #endif
378 };
379
380 struct plinemsg_type *plinemsg_types = (struct plinemsg_type *) 0;
381
382 #ifdef PANICTRACE
383 const char *ARGV0;
384 #endif
385
386 /* support for lint.h */
387 unsigned nhUse_dummy = 0;
388
389 /* dummy routine used to force linkage */
390 void
391 decl_init()
392 {
393     return;
394 }
395
396 /*decl.c*/