-+-+-+-+-+-+-+-+ START OF PART 60 -+-+-+-+-+-+-+-+
X`09      else if (holder & inventory`5BINVEN_FEET`5D.flags)
X`09`09l = INVEN_FEET;
X#else
X`09      if (TR_CURSED & inventory`5BINVEN_BODY`5D.flags)
X`09`09l = INVEN_BODY;
X`09      else if (TR_CURSED & inventory`5BINVEN_ARM`5D.flags)
X`09`09l = INVEN_ARM;
X`09      else if (TR_CURSED & inventory`5BINVEN_OUTER`5D.flags)
X`09`09l = INVEN_OUTER;
X`09      else if (TR_CURSED & inventory`5BINVEN_HEAD`5D.flags)
X`09`09l = INVEN_HEAD;
X`09      else if (TR_CURSED & inventory`5BINVEN_HANDS`5D.flags)
X`09`09l = INVEN_HANDS;
X`09      else if (TR_CURSED & inventory`5BINVEN_FEET`5D.flags)
X`09`09l = INVEN_FEET;
X#endif
X
X`09      if (l > 0)
X`09`09`7B
X`09`09  i_ptr = &inventory`5Bl`5D;
X`09`09  objdes(tmp_str, i_ptr, FALSE);
X`09`09  (void) sprintf(out_val,"Your %s glows brightly!", tmp_str);
X`09`09  msg_print(out_val);
X`09`09  flag = FALSE;
X`09`09  for (k = 0; k < randint(2) + 1; k++)
X`09`09    if (enchant(&i_ptr->toac, 10))
X`09`09      flag = TRUE;
X`09`09  if (flag)
X`09`09    `7B
X#ifdef ATARIST_MWC
X`09`09      i_ptr->flags &= `7Eholder;
X#else
X`09`09      i_ptr->flags &= `7ETR_CURSED;
X#endif
X`09`09      calc_bonuses ();
X`09`09    `7D
X`09`09  else
X`09`09    msg_print("The enchantment fails.");
X`09`09  ident = TRUE;
X`09`09`7D
X`09      break;
X`09    case 36:
X`09      if ((inventory`5BINVEN_BODY`5D.tval != TV_NOTHING)
X`09`09  && (randint(4) == 1))
X`09`09k = INVEN_BODY;
X`09      else if ((inventory`5BINVEN_ARM`5D.tval != TV_NOTHING)
X`09`09       && (randint(3) ==1))
X`09`09k = INVEN_ARM;
X`09      else if ((inventory`5BINVEN_OUTER`5D.tval != TV_NOTHING)
X`09`09       && (randint(3) ==1))
X`09`09k = INVEN_OUTER;
X`09      else if ((inventory`5BINVEN_HEAD`5D.tval != TV_NOTHING)
X`09`09       && (randint(3) ==1))
X`09`09k = INVEN_HEAD;
X`09      else if ((inventory`5BINVEN_HANDS`5D.tval != TV_NOTHING)
X`09`09       && (randint(3) ==1))
X`09`09k = INVEN_HANDS;
X`09      else if ((inventory`5BINVEN_FEET`5D.tval != TV_NOTHING)
X`09`09       && (randint(3) ==1))
X`09`09k = INVEN_FEET;
X`09      else if (inventory`5BINVEN_BODY`5D.tval != TV_NOTHING)
X`09`09k = INVEN_BODY;
X`09      else if (inventory`5BINVEN_ARM`5D.tval != TV_NOTHING)
X`09`09k = INVEN_ARM;
X`09      else if (inventory`5BINVEN_OUTER`5D.tval != TV_NOTHING)
X`09`09k = INVEN_OUTER;
X`09      else if (inventory`5BINVEN_HEAD`5D.tval != TV_NOTHING)
X`09`09k = INVEN_HEAD;
X`09      else if (inventory`5BINVEN_HANDS`5D.tval != TV_NOTHING)
X`09`09k = INVEN_HANDS;
X`09      else if (inventory`5BINVEN_FEET`5D.tval != TV_NOTHING)
X`09`09k = INVEN_FEET;
X`09      else
X`09`09k = 0;
X
X`09      if (k > 0)
X`09`09`7B
X`09`09  i_ptr = &inventory`5Bk`5D;
X`09`09  objdes(tmp_str, i_ptr, FALSE);
X`09`09  (void)sprintf(out_val,"Your %s glows black, fades.",tmp_str);
X`09`09  msg_print(out_val);
X`09`09  unmagic_name(i_ptr);
X`09`09  i_ptr->flags = TR_CURSED;
X`09`09  i_ptr->toac = -randint(5) - randint(5);
X`09`09  calc_bonuses ();
X`09`09  ident = TRUE;
X`09`09`7D
X`09      break;
X`09    case 37:
X`09      ident = FALSE;
X`09      for (k = 0; k < randint(3); k++)
X`09`09`7B
X`09`09  y = char_row;
X`09`09  x = char_col;
X`09`09  ident `7C= summon_undead(&y, &x);
X`09`09`7D
X`09      break;
X`09    case 38:
X`09      ident = TRUE;
X`09      bless(randint(12)+6);
X`09      break;
X`09    case 39:
X`09      ident = TRUE;
X`09      bless(randint(24)+12);
X`09      break;
X`09    case 40:
X`09      ident = TRUE;
X`09      bless(randint(48)+24);
X`09      break;
X`09    case 41:
X`09      ident = TRUE;
X`09      if (py.flags.word_recall == 0)
X`09`09py.flags.word_recall = 25 + randint(30);
X`09      msg_print("The air about you becomes charged.");
X`09      break;
X`09    case 42:
X`09      destroy_area(char_row, char_col);
X`09      ident = TRUE;
X`09      break;
X`09    default:
X`09      msg_print("Internal error in scroll()");
X`09      break;
X`09    `7D
X`09  /* End of Scrolls.`09`09`09       */
X`09`7D
X      i_ptr = &inventory`5Bitem_val`5D;
X      if (ident)
X`09`7B
X`09  if (!known1_p(i_ptr))
X`09    `7B
X`09      m_ptr = &py.misc;
X`09      /* round half-way case up */
X`09      m_ptr->exp += (i_ptr->level +(m_ptr->lev >> 1)) / m_ptr->lev;
X`09      prt_experience();
X
X`09      identify(&item_val);
X`09      i_ptr = &inventory`5Bitem_val`5D;
X`09    `7D
X`09`7D
X      else if (!known1_p(i_ptr))
X`09sample (i_ptr);
X      if (used_up)
X`09`7B
X`09  desc_remain(item_val);
X`09  inven_destroy(item_val);
X`09`7D
X    `7D
X`7D
$ CALL UNPACK SCROLLS.C;1 1695629205
$ create 'f'
X/* source/sets.c: code to emulate the original Pascal sets
X
X   Copyright (c) 1989-92 James E. Wilson
X
X   This software may be copied and distributed for educational, research, an
Vd
X   not for profit purposes provided that this copyright and statement are
X   included in all such copies. */
X
X#include "config.h"
X#include "constant.h"
X#include "types.h"
X
Xint set_room(element)
Xregister int element;
X`7B
X  if ((element == DARK_FLOOR) `7C`7C (element == LIGHT_FLOOR))
X    return(TRUE);
X  return(FALSE);
X`7D
X
Xint set_corr(element)
Xregister int element;
X`7B
X  if (element == CORR_FLOOR `7C`7C element == BLOCKED_FLOOR)
X    return(TRUE);
X  return(FALSE);
X`7D
X
Xint set_floor(element)
Xint element;
X`7B
X  if (element <= MAX_CAVE_FLOOR)
X    return(TRUE);
X  else
X    return(FALSE);
X`7D
X
Xint set_corrodes(item)
Xinven_type *item;
X`7B
X  switch(item->tval)
X    `7B
X    case TV_SWORD: case TV_HELM: case TV_SHIELD: case TV_HARD_ARMOR:
X    case TV_WAND:
X      return (TRUE);
X    `7D
X  return(FALSE);
X`7D
X
X
Xint set_flammable(item)
Xinven_type *item;
X`7B
X  switch(item->tval)
X    `7B
X    case TV_ARROW: case TV_BOW: case TV_HAFTED: case TV_POLEARM:
X    case TV_BOOTS: case TV_GLOVES: case TV_CLOAK: case TV_SOFT_ARMOR:
X      /* Items of (RF) should not be destroyed.  */
X      if (item->flags & TR_RES_FIRE)
X`09return FALSE;
X      else
X`09return TRUE;
X
X    case TV_STAFF: case TV_SCROLL1: case TV_SCROLL2:
X      return TRUE;
X    `7D
X  return(FALSE);
X`7D
X
X
Xint set_frost_destroy(item)
Xinven_type *item;
X`7B
X  if ((item->tval == TV_POTION1) `7C`7C (item->tval == TV_POTION2)
X      `7C`7C (item->tval == TV_FLASK))
X    return(TRUE);
X  return(FALSE);
X`7D
X
X
Xint set_acid_affect(item)
Xinven_type *item;
X`7B
X  switch(item->tval)
X    `7B
X    case TV_MISC: case TV_CHEST:
X      return TRUE;
X    case TV_BOLT: case TV_ARROW:
X    case TV_BOW: case TV_HAFTED: case TV_POLEARM: case TV_BOOTS:
X    case TV_GLOVES: case TV_CLOAK: case TV_SOFT_ARMOR:
X      if (item->flags & TR_RES_ACID)
X`09return (FALSE);
X      else
X`09return (TRUE);
X    `7D
X  return(FALSE);
X`7D
X
X
Xint set_lightning_destroy(item)
Xinven_type *item;
X`7B
X  if ((item->tval == TV_RING) `7C`7C (item->tval == TV_WAND)
X      `7C`7C (item->tval == TV_SPIKE))
X    return(TRUE);
X  else
X    return(FALSE);
X`7D
X
X
X/*ARGSUSED*/`09/* to shut up lint about unused argument */
X#ifdef __TURBOC__
X`09#pragma argused
X#endif
Xint set_null(item)
Xinven_type *item;
X#if defined(MAC) && !defined(THINK_C)
X`09#pragma unused(item)
X#endif
X`7B
X  return(FALSE);
X`7D
X
X
Xint set_acid_destroy(item)
Xinven_type *item;
X`7B
X  switch(item->tval)
X    `7B
X    case TV_ARROW: case TV_BOW: case TV_HAFTED: case TV_POLEARM:
X    case TV_BOOTS: case TV_GLOVES: case TV_CLOAK: case TV_HELM:
X    case TV_SHIELD: case TV_HARD_ARMOR: case TV_SOFT_ARMOR:
X      if (item->flags & TR_RES_ACID)
X`09return FALSE;
X      else
X`09return TRUE;
X    case TV_STAFF:
X    case TV_SCROLL1: case TV_SCROLL2: case TV_FOOD: case TV_OPEN_DOOR:
X    case TV_CLOSED_DOOR:
X      return(TRUE);
X    `7D
X  return(FALSE);
X`7D
X
X
Xint set_fire_destroy(item)
Xinven_type *item;
X`7B
X  switch(item->tval)
X    `7B
X    case TV_ARROW: case TV_BOW: case TV_HAFTED: case TV_POLEARM:
X    case TV_BOOTS: case TV_GLOVES: case TV_CLOAK: case TV_SOFT_ARMOR:
X      if (item->flags & TR_RES_FIRE)
X`09return FALSE;
X      else
X`09return TRUE;
X    case TV_STAFF: case TV_SCROLL1: case TV_SCROLL2: case TV_POTION1:
X    case TV_POTION2: case TV_FLASK: case TV_FOOD: case TV_OPEN_DOOR:
X    case TV_CLOSED_DOOR:
X      return(TRUE);
X    `7D
X  return(FALSE);
X`7D
X
X
Xint general_store(element)
Xint element;
X`7B
X  switch(element)
X    `7B
X    case TV_DIGGING: case TV_BOOTS: case TV_CLOAK: case TV_FOOD:
X    case TV_FLASK: case TV_LIGHT: case TV_SPIKE:
X      return(TRUE);
X    `7D
X  return(FALSE);
X`7D
X
X
Xint armory(element)
Xint element;
X`7B
X  switch(element)
X    `7B
X    case TV_BOOTS: case TV_GLOVES: case TV_HELM: case TV_SHIELD:
X    case TV_HARD_ARMOR: case TV_SOFT_ARMOR:
X      return(TRUE);
X    `7D
X  return(FALSE);
X`7D
X
X
Xint weaponsmith(element)
Xint element;
X`7B
X  switch(element)
X    `7B
X    case TV_SLING_AMMO: case TV_BOLT: case TV_ARROW: case TV_BOW:
X    case TV_HAFTED: case TV_POLEARM: case TV_SWORD:
X      return(TRUE);
X    `7D
X  return(FALSE);
X`7D
X
X
Xint temple(element)
Xint element;
X`7B
X  switch(element)
X    `7B
X    case TV_HAFTED: case TV_SCROLL1: case TV_SCROLL2: case TV_POTION1:
X    case TV_POTION2: case TV_PRAYER_BOOK:
X      return(TRUE);
X    `7D
X  return(FALSE);
X`7D
X
X
Xint alchemist(element)
Xint element;
X`7B
X  switch(element)
X    `7B
X    case TV_SCROLL1: case TV_SCROLL2: case TV_POTION1: case TV_POTION2:
X      return(TRUE);
X    `7D
X  return(FALSE);
X`7D
X
X
Xint magic_shop(element)
Xint element;
X`7B
X  switch(element)
X    `7B
X    case TV_AMULET: case TV_RING: case TV_STAFF: case TV_WAND:
X    case TV_SCROLL1: case TV_SCROLL2: case TV_POTION1: case TV_POTION2:
X    case TV_MAGIC_BOOK:
X      return(TRUE);
X    `7D
X  return(FALSE);
X`7D
X
X#ifdef MAC
X/* The last time tried, MPW failed to handle the initialized array of
X   function pointers properly.  hence, this hack. */
Xint store_buy(storeno, element)
Xint storeno;
Xint element;
X`7B
X  switch (storeno)
X    `7B
X    case 0: return(general_store(element));
X    case 1: return(armory(element));
X    case 2: return(weaponsmith(element));
X    case 3: return(temple(element));
X    case 4: return(alchemist(element));
X    case 5: return(magic_shop(element));
X    `7D
X  return(FALSE);
X`7D
X#endif
$ CALL UNPACK SETS.C;1 2002846960
$ create 'f'
X/* source/signals.c: signal handlers
X
X   Copyright (c) 1989-92 James E. Wilson, Christopher J. Stuart
X
X   This software may be copied and distributed for educational, research, an
Vd
X   not for profit purposes provided that this copyright and statement are
X   included in all such copies. */
X
X/* This signal package was brought to you by`09`09-JEW-  */
X/* Completely rewritten by`09`09`09`09-CJS- */
X
X/* To find out what system we're on.  */
X
X#include <stdio.h>
X
X#include "config.h"
X#include "constant.h"
X
X/* Signals have no significance on the Mac */
X
X#ifdef MAC
X
Xvoid nosignals()
X`7B
X`7D
X
Xvoid signals()
X`7B
X`7D
X
Xvoid init_signals()
X`7B
X`7D
X
X#else /* a non-Mac system */
X
X#ifdef ATARIST_MWC
X/* need these for atari st, but for unix, must include signals.h first,
X   or else suspend won't be properly declared */
X#include "types.h"
X#include "externs.h"
X#endif
X
X/* skip most of the file on an ATARI ST */
X/* commented away most single handling for Atari ST TC too, as this
X   doesn't work as it should.  */
X#if !defined(ATARIST_MWC) && !defined(ATARIST_TC)
X
X#if defined(SYS_V) && defined(lint)
X/* for AIX, prevent hundreds of unnecessary lint errors, define before
X   signal.h is included */
X#define _h_IEEETRAP
Xtypedef struct `7B int stuff; `7D fpvmach;
X#endif
X
X/* must include before externs.h, because that uses SIGTSTP */
X#include <signal.h>
X
X#include "types.h"
X#include "externs.h"
X
X#ifndef USG
X/* only needed for Berkeley UNIX */
X#include <sys/types.h>
X#include <sys/param.h>
X#endif
X
X#ifdef USG
X#ifndef ATARIST_MWC
X#include <string.h>
X#endif
X#else
X#include <strings.h>
X#endif
X
X#ifndef VMS
X#ifdef USG
Xvoid exit();
X#ifdef __TURBOC__
Xvoid sleep();
X#else
Xunsigned sleep();
X#endif
X#endif
X#endif
X
Xstatic int error_sig = -1;
Xstatic int signal_count = 0;
X
X/*ARGSUSED*/
X#ifndef USG
Xstatic int signal_handler(sig, code, scp)
Xint sig, code;
Xstruct sigcontext *scp;
X`7B
X  int smask;
X
X  smask = sigsetmask(0) `7C (1 << sig);
X#else
X#if defined(__TURBOC__) `7C`7C defined(AMIGA)
Xstatic void signal_handler(sig)
X#else
Xstatic int signal_handler(sig)
X#endif
Xint sig;
X`7B
X#endif
X
X  if(error_sig >= 0)`09/* Ignore all second signals. */
X    `7B
X      if(++signal_count > 10)`09/* Be safe. We will die if persistent enough
V. */
X`09(void) signal(sig, SIG_DFL);
X      return;
X    `7D
X  error_sig = sig;
X
X  /* Allow player to think twice. Wizard may force a core dump. */
X  if (sig == SIGINT
X#if !defined(MSDOS) && !defined(AMIGA) && !defined(ATARIST_TC)
X      `7C`7C sig == SIGQUIT
X#endif
X      )
X    `7B
X      if (death)
X`09(void) signal(sig, SIG_IGN);`09`09/* Can't quit after death. */
X      else if (!character_saved && character_generated)
X`09`7B
X`09  if (!get_check("Really commit *Suicide*?"))
X`09    `7B
X`09      if (turn > 0)
X`09`09disturb(1, 0);
X`09      erase_line(0, 0);
X`09      put_qio();
X`09      error_sig = -1;
X#ifdef USG
X`09      (void) signal(sig, signal_handler);/* Have to restore handler. */
X#else
X`09      (void) sigsetmask(smask);
X#endif
X`09      /* in case control-c typed during msg_print */
X`09      if (wait_for_more)
X`09`09put_buffer(" -more-", MSG_LINE, 0);
X`09      put_qio();
X`09      return;`09`09/* OK. We don't quit. */
X`09    `7D
X`09  (void) strcpy(died_from, "Interrupting");
X`09`7D
X      else
X`09(void) strcpy(died_from, "Abortion");
X      prt("Interrupt!", 0, 0);
X      death = TRUE;
X      exit_game();
X    `7D
X  /* Die. */
X  prt(
X"OH NO!!!!!!  A gruesome software bug LEAPS out at you. There is NO defense!
V",
X      23, 0);
X  if (!death && !character_saved && character_generated)
X    `7B
X      panic_save = 1;
X      prt("Your guardian angel is trying to save you.", 0, 0);
X      (void) sprintf(died_from,"(panic save %d)",sig);
+-+-+-+-+-+-+-+-  END  OF PART 60 +-+-+-+-+-+-+-+-
