[BACK]Return to extern.c CVS log [TXT][DIR] Up to [contributed] / early-roguelike / rogue5

Annotation of early-roguelike/rogue5/extern.c, Revision 1.1

1.1     ! rubenllo    1: /*
        !             2:  * global variable initializaton
        !             3:  *
        !             4:  * @(#)extern.c        4.82 (Berkeley) 02/05/99
        !             5:  *
        !             6:  * Rogue: Exploring the Dungeons of Doom
        !             7:  * Copyright (C) 1980-1983, 1985, 1999 Michael Toy, Ken Arnold and Glenn Wichman
        !             8:  * All rights reserved.
        !             9:  *
        !            10:  * See the file LICENSE.TXT for full copyright and licensing information.
        !            11:  */
        !            12:
        !            13: /* All global variables are defined here, or in vers.c or init.c */
        !            14:
        !            15: #include <curses.h>
        !            16: #include "rogue.h"
        !            17:
        !            18: int  after;                            /* True if we want after daemons */
        !            19: int  again;                            /* Repeating the last command */
        !            20: int  noscore;                          /* Was a wizard sometime */
        !            21: int  seenstairs;                       /* Have seen the stairs (for lsd) */
        !            22: int  amulet = FALSE;                   /* He found the amulet */
        !            23: int  door_stop = FALSE;                        /* Stop running when we pass a door */
        !            24: int  fight_flush = FALSE;              /* True if toilet input */
        !            25: int  firstmove = FALSE;                        /* First move after setting door_stop */
        !            26: int  got_ltc = FALSE;                  /* We have gotten the local tty chars */
        !            27: int  has_hit = FALSE;                  /* Has a "hit" message pending in msg */
        !            28: int  in_shell = FALSE;                 /* True if executing a shell */
        !            29: int  inv_describe = TRUE;              /* Say which way items are being used */
        !            30: int  jump = FALSE;                     /* Show running as series of jumps */
        !            31: int  kamikaze = FALSE;                 /* to_death really to DEATH */
        !            32: int  lower_msg = FALSE;                        /* Messages should start w/lower case */
        !            33: int  move_on = FALSE;                  /* Next move shouldn't pick up items */
        !            34: int  msg_esc = FALSE;                  /* Check for ESC from msg's --More-- */
        !            35: int  passgo = FALSE;                   /* Follow passages */
        !            36: int  playing = TRUE;                   /* True until he quits */
        !            37: int  q_comm = FALSE;                   /* Are we executing a 'Q' command? */
        !            38: int  running = FALSE;                  /* True if player is running */
        !            39: int  save_msg = TRUE;                  /* Remember last msg */
        !            40: int  see_floor = TRUE;                 /* Show the lamp illuminated floor */
        !            41: int  stat_msg = FALSE;                 /* Should status() print as a msg() */
        !            42: int  terse = FALSE;                            /* True if we should be short */
        !            43: int  to_death = FALSE;                 /* Fighting is to the death! */
        !            44: int  tombstone = TRUE;                 /* Print out tombstone at end */
        !            45: int  use_savedir = FALSE;              /* True if using system savefile dir */
        !            46: #ifdef MASTER
        !            47: int  wizard = FALSE;                   /* True if allows wizard commands */
        !            48: #endif
        !            49: int  pack_used[26] = {                 /* Is the character used in the pack? */
        !            50:     FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,
        !            51:     FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,
        !            52:     FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE
        !            53: };
        !            54:
        !            55: int  dir_ch;                           /* Direction from last get_dir() call */
        !            56: char file_name[MAXSTR];                        /* Save file name */
        !            57: char huh[MAXSTR];                      /* The last message printed */
        !            58: const char *p_colors[MAXPOTIONS];              /* Colors of the potions */
        !            59: char prbuf[2*MAXSTR];                  /* buffer for sprintfs */
        !            60: const char *r_stones[MAXRINGS];                /* Stone settings of the rings */
        !            61: int  runch;                            /* Direction player is running */
        !            62: char *s_names[MAXSCROLLS];             /* Names of the scrolls */
        !            63: int  take;                             /* Thing she is taking */
        !            64: char whoami[MAXSTR];                   /* Name of player */
        !            65: const char *ws_made[MAXSTICKS];                /* What sticks are made of */
        !            66: char *ws_type[MAXSTICKS];              /* Is it a wand or a staff */
        !            67: int  orig_dsusp;                       /* Original dsusp char */
        !            68: char fruit[MAXSTR] =                   /* Favorite fruit */
        !            69:                { 's', 'l', 'i', 'm', 'e', '-', 'm', 'o', 'l', 'd', '\0' };
        !            70: char home[MAXSTR] = { '\0' };          /* User's home directory */
        !            71: const char *inv_t_name[] = {
        !            72:        "Overwrite",
        !            73:        "Slow",
        !            74:        "Clear"
        !            75: };
        !            76: int  l_last_comm = '\0';               /* Last last_comm */
        !            77: int  l_last_dir = '\0';                        /* Last last_dir */
        !            78: int  last_comm = '\0';                 /* Last command typed */
        !            79: int  last_dir = '\0';                  /* Last direction given */
        !            80: const char *tr_name[] = {                      /* Names of the traps */
        !            81:        "a trapdoor",
        !            82:        "an arrow trap",
        !            83:        "a sleeping gas trap",
        !            84:        "a beartrap",
        !            85:        "a teleport trap",
        !            86:        "a poison dart trap",
        !            87:        "a rust trap",
        !            88:         "a mysterious trap"
        !            89: };
        !            90:
        !            91:
        !            92: int n_objs;                            /* # items listed in inventory() call */
        !            93: int ntraps;                            /* Number of traps on this level */
        !            94: int hungry_state = 0;                  /* How hungry is he */
        !            95: int inpack = 0;                                /* Number of things in pack */
        !            96: int inv_type = 0;                      /* Type of inventory to use */
        !            97: int level = 1;                         /* What level she is on */
        !            98: int max_hit;                           /* Max damage done to her in to_death */
        !            99: int max_level;                         /* Deepest player has gone */
        !           100: int mpos = 0;                          /* Where cursor is on top line */
        !           101: int no_food = 0;                       /* Number of levels without food */
        !           102: const int a_class[MAXARMORS] = {               /* Armor class for each armor type */
        !           103:        8,      /* LEATHER */
        !           104:        7,      /* RING_MAIL */
        !           105:        7,      /* STUDDED_LEATHER */
        !           106:        6,      /* SCALE_MAIL */
        !           107:        5,      /* CHAIN_MAIL */
        !           108:        4,      /* SPLINT_MAIL */
        !           109:        4,      /* BANDED_MAIL */
        !           110:        3,      /* PLATE_MAIL */
        !           111: };
        !           112:
        !           113: int count = 0;                         /* Number of times to repeat command */
        !           114: FILE *scoreboard = NULL;               /* File descriptor for score file */
        !           115: FILE *logfi = NULL;                     /* The log file */
        !           116: int food_left;                         /* Amount of food in hero's stomach */
        !           117: int lastscore = -1;                    /* Score before this turn */
        !           118: int no_command = 0;                    /* Number of turns asleep */
        !           119: int no_move = 0;                       /* Number of turns held in place */
        !           120: int purse = 0;                         /* How much gold he has */
        !           121: int quiet = 0;                         /* Number of quiet turns */
        !           122: int vf_hit = 0;                                /* Number of time flytrap has hit */
        !           123:
        !           124: unsigned int dnum;                             /* Dungeon number */
        !           125: unsigned int seed;                             /* Random number seed */
        !           126: const int e_levels[] = {
        !           127:         10L,
        !           128:        20L,
        !           129:        40L,
        !           130:        80L,
        !           131:        160L,
        !           132:        320L,
        !           133:        640L,
        !           134:       1300L,
        !           135:       2600L,
        !           136:       5200L,
        !           137:      13000L,
        !           138:      26000L,
        !           139:      50000L,
        !           140:     100000L,
        !           141:     200000L,
        !           142:     400000L,
        !           143:     800000L,
        !           144:    2000000L,
        !           145:    4000000L,
        !           146:    8000000L,
        !           147:         0L
        !           148: };
        !           149:
        !           150: coord delta;                           /* Change indicated to get_dir() */
        !           151: coord oldpos;                          /* Position before last look() call */
        !           152: coord stairs;                          /* Location of staircase */
        !           153:
        !           154: PLACE places[MAXLINES*MAXCOLS];                /* level map */
        !           155:
        !           156: THING *cur_armor;                      /* What he is wearing */
        !           157: THING *cur_ring[2];                    /* Which rings are being worn */
        !           158: THING *cur_weapon;                     /* Which weapon he is weilding */
        !           159: THING *l_last_pick = NULL;             /* Last last_pick */
        !           160: THING *last_pick = NULL;               /* Last object picked in get_item() */
        !           161: THING *lvl_obj = NULL;                 /* List of objects on this level */
        !           162: THING *mlist = NULL;                   /* List of monsters on the level */
        !           163: THING player;                          /* His stats */
        !           164:                                        /* restart of game */
        !           165:
        !           166: WINDOW *hw = NULL;                     /* used as a scratch window */
        !           167:
        !           168: #define INIT_STATS { 16, 0, 1, 10, 12, "1x4", 12 }
        !           169:
        !           170: struct stats max_stats = INIT_STATS;   /* The maximum for the player */
        !           171:
        !           172: struct room *oldrp;                    /* Roomin(&oldpos) */
        !           173: struct room rooms[MAXROOMS];           /* One for each room -- A level */
        !           174: struct room passages[MAXPASS] =                /* One for each passage */
        !           175: {
        !           176:     { {0, 0}, {0, 0}, {0, 0}, 0, ISGONE|ISDARK, 0, {{0,0}} },
        !           177:     { {0, 0}, {0, 0}, {0, 0}, 0, ISGONE|ISDARK, 0, {{0,0}} },
        !           178:     { {0, 0}, {0, 0}, {0, 0}, 0, ISGONE|ISDARK, 0, {{0,0}} },
        !           179:     { {0, 0}, {0, 0}, {0, 0}, 0, ISGONE|ISDARK, 0, {{0,0}} },
        !           180:     { {0, 0}, {0, 0}, {0, 0}, 0, ISGONE|ISDARK, 0, {{0,0}} },
        !           181:     { {0, 0}, {0, 0}, {0, 0}, 0, ISGONE|ISDARK, 0, {{0,0}} },
        !           182:     { {0, 0}, {0, 0}, {0, 0}, 0, ISGONE|ISDARK, 0, {{0,0}} },
        !           183:     { {0, 0}, {0, 0}, {0, 0}, 0, ISGONE|ISDARK, 0, {{0,0}} },
        !           184:     { {0, 0}, {0, 0}, {0, 0}, 0, ISGONE|ISDARK, 0, {{0,0}} },
        !           185:     { {0, 0}, {0, 0}, {0, 0}, 0, ISGONE|ISDARK, 0, {{0,0}} },
        !           186:     { {0, 0}, {0, 0}, {0, 0}, 0, ISGONE|ISDARK, 0, {{0,0}} },
        !           187:     { {0, 0}, {0, 0}, {0, 0}, 0, ISGONE|ISDARK, 0, {{0,0}} }
        !           188: };
        !           189:
        !           190: #define ___ 1
        !           191: #define XX 10
        !           192: struct monster monsters[26] =
        !           193:     {
        !           194: /* Name                 CARRY  FLAG    str, exp, lvl, amr, hpt, dmg */
        !           195: { "aquator",      0,   ISMEAN, { XX, 20,   5,   2, ___, "0x0/0x0" } },
        !           196: { "bat",          0,   ISFLY,  { XX,  1,   1,   3, ___, "1x2" } },
        !           197: { "centaur",     15,   0,      { XX, 17,   4,   4, ___, "1x2/1x5/1x5" } },
        !           198: { "dragon",     100,   ISMEAN, { XX,5000, 10,  -1, ___, "1x8/1x8/3x10" } },
        !           199: { "emu",          0,   ISMEAN, { XX,  2,   1,   7, ___, "1x2" } },
        !           200: { "venus flytrap", 0,  ISMEAN, { XX, 80,   8,   3, ___, "0x0" } },
        !           201: { "griffin",     20,   ISMEAN|ISFLY|ISREGEN, { XX,2000, 13,   2, ___, "4x3/3x5" } },
        !           202: { "hobgoblin",    0,   ISMEAN, { XX,  3,   1,   5, ___, "1x8" } },
        !           203: { "ice monster",   0,  0,      { XX,  5,   1,   9, ___, "0x0" } },
        !           204: { "jabberwock",   70,  0,      { XX,3000, 15,   6, ___, "2x12/2x4" } },
        !           205: { "kestrel",      0,   ISMEAN|ISFLY,   { XX,  1,   1,   7, ___, "1x4" } },
        !           206: { "leprechaun",           0,   0,      { XX, 10,   3,   8, ___, "1x1" } },
        !           207: { "medusa",      40,   ISMEAN, { XX,200,   8,   2, ___, "3x4/3x4/2x5" } },
        !           208: { "nymph",      100,   0,      { XX, 37,   3,   9, ___, "0x0" } },
        !           209: { "orc",         15,   ISGREED,{ XX,  5,   1,   6, ___, "1x8" } },
        !           210: { "phantom",      0,   ISINVIS,{ XX,120,   8,   3, ___, "4x4" } },
        !           211: { "quagga",       0,   ISMEAN, { XX, 15,   3,   3, ___, "1x5/1x5" } },
        !           212: { "rattlesnake",   0,  ISMEAN, { XX,  9,   2,   3, ___, "1x6" } },
        !           213: { "snake",        0,   ISMEAN, { XX,  2,   1,   5, ___, "1x3" } },
        !           214: { "troll",       50,   ISREGEN|ISMEAN,{ XX, 120, 6, 4, ___, "1x8/1x8/2x6" } },
        !           215: { "black unicorn", 0,  ISMEAN, { XX,190,   7,  -2, ___, "1x9/1x9/2x9" } },
        !           216: { "vampire",     20,   ISREGEN|ISMEAN,{ XX,350,   8,   1, ___, "1x10" } },
        !           217: { "wraith",       0,   0,      { XX, 55,   5,   4, ___, "1x6" } },
        !           218: { "xeroc",       30,   0,      { XX,100,   7,   7, ___, "4x4" } },
        !           219: { "yeti",        30,   0,      { XX, 50,   4,   6, ___, "1x6/1x6" } },
        !           220: { "zombie",       0,   ISMEAN, { XX,  6,   2,   8, ___, "1x8" } }
        !           221:     };
        !           222: #undef ___
        !           223: #undef XX
        !           224:
        !           225: struct obj_info things[NUMTHINGS] = {
        !           226:     { 0,                       26 },   /* potion */
        !           227:     { 0,                       36 },   /* scroll */
        !           228:     { 0,                       16 },   /* food */
        !           229:     { 0,                        7 },   /* weapon */
        !           230:     { 0,                        7 },   /* armor */
        !           231:     { 0,                        4 },   /* ring */
        !           232:     { 0,                        4 },   /* stick */
        !           233: };
        !           234:
        !           235: struct obj_info arm_info[MAXARMORS] = {
        !           236:     { "leather armor",          20,     20, NULL, FALSE },
        !           237:     { "ring mail",              15,     25, NULL, FALSE },
        !           238:     { "studded leather armor",  15,     20, NULL, FALSE },
        !           239:     { "scale mail",             13,     30, NULL, FALSE },
        !           240:     { "chain mail",             12,     75, NULL, FALSE },
        !           241:     { "splint mail",            10,     80, NULL, FALSE },
        !           242:     { "banded mail",            10,     90, NULL, FALSE },
        !           243:     { "plate mail",              5,    150, NULL, FALSE },
        !           244: };
        !           245: struct obj_info pot_info[MAXPOTIONS] = {
        !           246:     { "confusion",              7,   5, NULL, FALSE },
        !           247:     { "hallucination",          8,   5, NULL, FALSE },
        !           248:     { "poison",                         8,   5, NULL, FALSE },
        !           249:     { "gain strength",         13, 150, NULL, FALSE },
        !           250:     { "see invisible",          3, 100, NULL, FALSE },
        !           251:     { "healing",               13, 130, NULL, FALSE },
        !           252:     { "monster detection",      6, 130, NULL, FALSE },
        !           253:     { "magic detection",        6, 105, NULL, FALSE },
        !           254:     { "raise level",            2, 250, NULL, FALSE },
        !           255:     { "extra healing",          5, 200, NULL, FALSE },
        !           256:     { "haste self",             5, 190, NULL, FALSE },
        !           257:     { "restore strength",      13, 130, NULL, FALSE },
        !           258:     { "blindness",              5,   5, NULL, FALSE },
        !           259:     { "levitation",             6,  75, NULL, FALSE },
        !           260: };
        !           261: struct obj_info ring_info[MAXRINGS] = {
        !           262:     { "protection",             9, 400, NULL, FALSE },
        !           263:     { "add strength",           9, 400, NULL, FALSE },
        !           264:     { "sustain strength",       5, 280, NULL, FALSE },
        !           265:     { "searching",             10, 420, NULL, FALSE },
        !           266:     { "see invisible",         10, 310, NULL, FALSE },
        !           267:     { "adornment",              1,  10, NULL, FALSE },
        !           268:     { "aggravate monster",     10,  10, NULL, FALSE },
        !           269:     { "dexterity",              8, 440, NULL, FALSE },
        !           270:     { "increase damage",        8, 400, NULL, FALSE },
        !           271:     { "regeneration",           4, 460, NULL, FALSE },
        !           272:     { "slow digestion",                 9, 240, NULL, FALSE },
        !           273:     { "teleportation",          5,  30, NULL, FALSE },
        !           274:     { "stealth",                7, 470, NULL, FALSE },
        !           275:     { "maintain armor",                 5, 380, NULL, FALSE },
        !           276: };
        !           277: struct obj_info scr_info[MAXSCROLLS] = {
        !           278:     { "monster confusion",              7, 140, NULL, FALSE },
        !           279:     { "magic mapping",                  4, 150, NULL, FALSE },
        !           280:     { "hold monster",                   2, 180, NULL, FALSE },
        !           281:     { "sleep",                          3,   5, NULL, FALSE },
        !           282:     { "enchant armor",                  7, 160, NULL, FALSE },
        !           283:     { "identify potion",               10,  80, NULL, FALSE },
        !           284:     { "identify scroll",               10,  80, NULL, FALSE },
        !           285:     { "identify weapon",                6,  80, NULL, FALSE },
        !           286:     { "identify armor",                         7, 100, NULL, FALSE },
        !           287:     { "identify ring, wand or staff",  10, 115, NULL, FALSE },
        !           288:     { "scare monster",                  3, 200, NULL, FALSE },
        !           289:     { "food detection",                         2,  60, NULL, FALSE },
        !           290:     { "teleportation",                  5, 165, NULL, FALSE },
        !           291:     { "enchant weapon",                         8, 150, NULL, FALSE },
        !           292:     { "create monster",                         4,  75, NULL, FALSE },
        !           293:     { "remove curse",                   7, 105, NULL, FALSE },
        !           294:     { "aggravate monsters",             3,  20, NULL, FALSE },
        !           295:     { "protect armor",                  2, 250, NULL, FALSE },
        !           296: };
        !           297: struct obj_info weap_info[MAXWEAPONS + 1] = {
        !           298:     { "mace",                          11,   8, NULL, FALSE },
        !           299:     { "long sword",                    11,  15, NULL, FALSE },
        !           300:     { "short bow",                     12,  15, NULL, FALSE },
        !           301:     { "arrow",                         12,   1, NULL, FALSE },
        !           302:     { "dagger",                                 8,   3, NULL, FALSE },
        !           303:     { "two handed sword",              10,  75, NULL, FALSE },
        !           304:     { "dart",                          12,   2, NULL, FALSE },
        !           305:     { "shuriken",                      12,   5, NULL, FALSE },
        !           306:     { "spear",                         12,   5, NULL, FALSE },
        !           307:     { NULL, 0 },       /* DO NOT REMOVE: fake entry for dragon's breath */
        !           308: };
        !           309: struct obj_info ws_info[MAXSTICKS] = {
        !           310:     { "light",                 12, 250, NULL, FALSE },
        !           311:     { "invisibility",           6,   5, NULL, FALSE },
        !           312:     { "lightning",              3, 330, NULL, FALSE },
        !           313:     { "fire",                   3, 330, NULL, FALSE },
        !           314:     { "cold",                   3, 330, NULL, FALSE },
        !           315:     { "polymorph",             15, 310, NULL, FALSE },
        !           316:     { "magic missile",         10, 170, NULL, FALSE },
        !           317:     { "haste monster",         10,   5, NULL, FALSE },
        !           318:     { "slow monster",          11, 350, NULL, FALSE },
        !           319:     { "drain life",             9, 300, NULL, FALSE },
        !           320:     { "nothing",                1,   5, NULL, FALSE },
        !           321:     { "teleport away",          6, 340, NULL, FALSE },
        !           322:     { "teleport to",            6,  50, NULL, FALSE },
        !           323:     { "cancellation",           5, 280, NULL, FALSE },
        !           324: };
        !           325:
        !           326: const struct h_list helpstr[] = {
        !           327:     {'?',      "       prints help",                           TRUE},
        !           328:     {'/',      "       identify object",                       TRUE},
        !           329:     {'h',      "       left",                                  TRUE},
        !           330:     {'j',      "       down",                                  TRUE},
        !           331:     {'k',      "       up",                                    TRUE},
        !           332:     {'l',      "       right",                                 TRUE},
        !           333:     {'y',      "       up & left",                             TRUE},
        !           334:     {'u',      "       up & right",                            TRUE},
        !           335:     {'b',      "       down & left",                           TRUE},
        !           336:     {'n',      "       down & right",                          TRUE},
        !           337:     {'H',      "       run left",                              FALSE},
        !           338:     {'J',      "       run down",                              FALSE},
        !           339:     {'K',      "       run up",                                FALSE},
        !           340:     {'L',      "       run right",                             FALSE},
        !           341:     {'Y',      "       run up & left",                         FALSE},
        !           342:     {'U',      "       run up & right",                        FALSE},
        !           343:     {'B',      "       run down & left",                       FALSE},
        !           344:     {'N',      "       run down & right",                      FALSE},
        !           345:     {CTRL('H'),        "       run left until adjacent",               FALSE},
        !           346:     {CTRL('J'),        "       run down until adjacent",               FALSE},
        !           347:     {CTRL('K'),        "       run up until adjacent",                 FALSE},
        !           348:     {CTRL('L'),        "       run right until adjacent",              FALSE},
        !           349:     {CTRL('Y'),        "       run up & left until adjacent",          FALSE},
        !           350:     {CTRL('U'),        "       run up & right until adjacent",         FALSE},
        !           351:     {CTRL('B'),        "       run down & left until adjacent",        FALSE},
        !           352:     {CTRL('N'),        "       run down & right until adjacent",       FALSE},
        !           353:     {'\0',     "       <SHIFT><dir>: run that way",            TRUE},
        !           354:     {'\0',     "       <CTRL><dir>: run till adjacent",        TRUE},
        !           355:     {'f',      "<dir>  fight till death or near death",        TRUE},
        !           356:     {'t',      "<dir>  throw something",                       TRUE},
        !           357:     {'m',      "<dir>  move onto without picking up",          TRUE},
        !           358:     {'z',      "<dir>  zap a wand in a direction",             TRUE},
        !           359:     {'^',      "<dir>  identify trap type",                    TRUE},
        !           360:     {'s',      "       search for trap/secret door",           TRUE},
        !           361:     {'>',      "       go down a staircase",                   TRUE},
        !           362:     {'<',      "       go up a staircase",                     TRUE},
        !           363:     {'.',      "       rest for a turn",                       TRUE},
        !           364:     {',',      "       pick something up",                     TRUE},
        !           365:     {'i',      "       inventory",                             TRUE},
        !           366:     {'I',      "       inventory single item",                 TRUE},
        !           367:     {'q',      "       quaff potion",                          TRUE},
        !           368:     {'r',      "       read scroll",                           TRUE},
        !           369:     {'e',      "       eat food",                              TRUE},
        !           370:     {'w',      "       wield a weapon",                        TRUE},
        !           371:     {'W',      "       wear armor",                            TRUE},
        !           372:     {'T',      "       take armor off",                        TRUE},
        !           373:     {'P',      "       put on ring",                           TRUE},
        !           374:     {'R',      "       remove ring",                           TRUE},
        !           375:     {'d',      "       drop object",                           TRUE},
        !           376:     {'c',      "       call object",                           TRUE},
        !           377:     {'a',      "       repeat last command",                   TRUE},
        !           378:     {')',      "       print current weapon",                  TRUE},
        !           379:     {']',      "       print current armor",                   TRUE},
        !           380:     {'=',      "       print current rings",                   TRUE},
        !           381:     {'@',      "       print current stats",                   TRUE},
        !           382:     {'D',      "       recall what's been discovered",         TRUE},
        !           383:     {'o',      "       examine/set options",                   TRUE},
        !           384:     {CTRL('R'),        "       redraw screen",                         TRUE},
        !           385:     {CTRL('P'),        "       repeat last message",                   TRUE},
        !           386:     {ESCAPE,   "       cancel command",                        TRUE},
        !           387:     {'S',      "       save game",                             TRUE},
        !           388:     {'Q',      "       quit",                                  TRUE},
        !           389:     {'!',      "       shell escape",                          TRUE},
        !           390:     {'F',      "<dir>  fight till either of you dies",         TRUE},
        !           391:     {'v',      "       print version number",                  TRUE},
        !           392:     {0,                NULL }
        !           393: };
        !           394: int numscores;
        !           395: char *Numname;
        !           396: int allscore;
        !           397: int between;
        !           398:
        !           399: #define _X_ { EMPTY }
        !           400:
        !           401: struct delayed_action d_list[MAXDAEMONS] = {
        !           402:     _X_, _X_, _X_, _X_, _X_, _X_, _X_, _X_, _X_, _X_,
        !           403:     _X_, _X_, _X_, _X_, _X_, _X_, _X_, _X_, _X_, _X_,
        !           404: };
        !           405:
        !           406: int group = 2;

CVSweb