[comp.sources.games] v10i074: nethack3p9 - display oriented dungeons & dragons

billr@saab.CNA.TEK.COM (Bill Randle) (07/12/90)

Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu>
Posting-number: Volume 10, Issue 74
Archive-name: nethack3p9/Part29
Supersedes: NetHack3: Volume 7, Issue 56-93



#! /bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of archive 29 (of 56)."
# Contents:  include/msdos.h mac/SL.proj.hqx src/read.c
# Wrapped by billr@saab on Wed Jul 11 17:11:35 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'include/msdos.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'include/msdos.h'\"
else
echo shar: Extracting \"'include/msdos.h'\" \(605 characters\)
sed "s/^X//" >'include/msdos.h' <<'END_OF_FILE'
X/*	SCCS Id: @(#)msdos.h	3.0	88/07/21
X/* msdos.h - function declarations for msdos.c */
X/* NetHack may be freely redistributed.  See license for details. */
X
X#ifndef MSDOS_H
X#define MSDOS_H
X
X#ifdef OLD_TOS
X#define msmsg	cprintf
X#endif
Xextern const char *alllevels, *allbones;
Xextern char levels[], bones[], permbones[], SAVEF[], hackdir[];
X#ifdef MSDOS
Xextern char SAVEP[];
X#endif
Xextern int ramdisk;
X#if defined(DGK) && !defined(OLD_TOS)
Xextern int count_only;
X#endif
X
X#define C(c)  (0x1f & (c))
X#define M(c)  (0x80 | (c))
X#define ABORT C('a')
X#define COUNT 0x1
X#define WRITE 0x2
X
X#endif /* MSDOS_H /* */
END_OF_FILE
if test 605 -ne `wc -c <'include/msdos.h'`; then
    echo shar: \"'include/msdos.h'\" unpacked with wrong size!
fi
# end of 'include/msdos.h'
fi
if test -f 'mac/SL.proj.hqx' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'mac/SL.proj.hqx'\"
else
echo shar: Extracting \"'mac/SL.proj.hqx'\" \(25348 characters\)
sed "s/^X//" >'mac/SL.proj.hqx' <<'END_OF_FILE'
X(This file must be converted with BinHex 4.0)
X
X:$A0`C@0IE'9f,R"bEfS!8&*25NY"5%`!N!K2Z-2$!*!%!3#3!diH!!"0(J!!!CS
X!!""G$80bD@0VCA3J4h*KF'J#!*!$39"36%0(8NBK"!ecF'9MAfaPGLj`FQpU!J#
X3!e"56dT,38K-!!%!P!!i!!"38Np+5d&)6!!"!*3!1!#3%3+L,8`q!*!'6lJ!N!S
X9!*!$%&d2CQPZC#"04L"QB@0dEh*c!J#3!d&38%a0ENCN)33!#J!X!*!%)JS!N!j
XC&!!!A!#KeUj)SGDZ6k(AMGB!N"i-c!!"$BB!&J#3"J2`!*$r!*$r!*$r!*$be!!
X!!9J!!(!&!!"%8PC5!9!!*'hN!!$r-!#f!*!&%!!NEH3!!2m`!,B!N!83!#4Yj!!
X!rc!!YJ#3"4!!*'hN!!$r-!#f!*!&%!!NEH3!!2m`!,B!N!83!#4Yj!!!rc!!YJ#
X3"4!!*'hN!!$r-!#f!*!&%!!NEH3!!2m`!,B!N!83!#4Yj!!!rc!!YJ#3"4!!*'h
XN!!$r-!#f!*!&%!!NEH3!!2m`!,B!N!83!#4Yj!!!rc!!YJ#3"4!!*'hN!!$r-!#
Xf!*!&%!!NEH3!!2m`!,B!N!83!#4Yj!!!rc!!YJ#3"4!!*'hN!!$r-!#f!*!&%!K
XcF'9MAfaPGVB!N!83!#4Yj!!!rc!!YJ#3"4!!*'hN!!$r-!#f!*!&%!!NEH3!!2m
X`!,B!N!8339"36'jS8d`)!!'!!!!#`!!!!3#3"'!!N"-%!*!J!J-!!`#3!r`!N!0
XJ!*!6"!#3(J'A!3)!"3#3!rJ!N!0J!*!6"!#3(TNS!3)!"J#3!r3!N!0J!*!6"!#
X3(TNS!3)!"`#3!r!!N!0J!*!6"!#3(TNS!3)!"!#3!q`!N!0J!*!6"!#3(J'A!3)
X!!J#3!qJ!N!0J!*!6"!#3)!%#!!J!N!2N!*!$B!#3%`3!N#!"!J!*!*!$i!#3!f!
X!N"-%!*!HI[!"!J!+!*!$h!#3!f!!N"-%!*!J!3)!!3#3!pJ!N!0J!*!6"!#3(Rl
X8!3)!N!8)!"Mr-!#fri3!N!0J!*!$F!#3"e!!N!-J!"`r2!!"UI!%#Mmm!!'Tm!3
XH2c`!!DR`"$)r2!!"UI!%6Mmm!!'Tm!5%2c`!!DR`"+3r2!!"UI!%aMmm!!'Tm!6
XQ2c`!!DR`"air2!!"UI!!N!-%!*!("!#3)`S)!!!'!*!$"J#3"!F`!*!$#J#3'p4
X#H!T+RFj1ZJ"86VS!CL`m58j%@%kk"@j(q[r+*Sa(q[r)*S41ZJ"Q6VS#U%kk"LC
X1ZJ$F6VS!U%*R5(MrrdK[!!4)9cmm!!%L1[qb6VS$JNke%!!JE3"X6T!!UI44q!T
XHIJ"1ZJ,kC`K+N!"R"!M3!!C1G5!i#RKQ$#`m@Np148kk"33J$%IkrfBQJ%je@Bm
X[2%4"9%&#CkQJ)&FJ8#*i#3JJ$C!!L8IkrdiQJ+!ZUD-X2&088P01ZJ614rVr0LD
X-,$a%8N9-6VS%[L"-)!4R$%kk!EB%J!#3!`aQp%lk"@T19[rD3IJ*%#*2F##J,R!
X"d"&D%G,!3IS!%R!&S#j9MdK[!!+TPdjH6R8ZFR0bB`"(qJAZ*VJ+I#mi#S"Q!PL
X26R9)jrri2Lm!2&(i#PjJ#PQ2,`LTT5!IS%"1ZJ)NCd4(q[ki*SJJ%'IQ)N"+N@B
XZ!"!!`#`m3e*&6%kk"#aR*$i[!$`J6#!%C`a1ZJ"i")!!N!--C[41ZJ636VS"R%c
XI(rp1GA!2UFP1ZJ9m6VS!#%kk"241G5"i#ZbJ*5"3)NJL''!+3HJ!#(3"K"M3`P(
X*rr53!)M3L@B#6R8L!+!Z)(J+l#!"S#3L8%r[rm!J6d+S!")aD3!%!"DJ&8+R5'N
X!$#"2UI)b'%kk!CiN@0A"0"JL''ibCaC53@F'8N&R'Nje-LMrp%kk!EM68Nje-LM
Xrp%kk!BM68Nje-LMrp%kk!Bl6U[rq6R91ZJ&1-LN!$%TT!!TQ(&4#DJa`BkR*8N*
XQq0056R91ZJ&8dUN!$Y056R91ZJ&XdUN!$P*#CJ668Nje3r83!Vj4CY3-B6mmCXj
X53QB'#QS!&rrq-L&B35*krAc5NC*+de*1G6)B6VS"$NAe%!$9f$3BCc)L''iNC`j
X53@B8-LMrp%kk!4CJ'$)Srr41ZJ$SB!ib+2rd6VS!m'!'6VS"%0+0dj*1G5)B6VS
X""0056R8JH[d3)$Vp%%US!!"R+$)S!#KR)L3S!"KC3N2Y!"$6k!!%e9Nbr$mm3KN
X5k!!p-[bTm&&"CZa"k!"!")!!N!0!CXC1G5"kr-`J1[c-F[pd!%US!!"R',iS!$e
XQ%MBS!#KR$04$XUJ!"'8%)LJ!"%(S!%!%J!#3!d"QeL"kr+SJ8!4"!"!``HC+--*
X1G9Q2,ca$6d4&2`HTS#"I82J+AL!)6R8SH[af)R3B!*2X!$M6c%je+(VmAX,m!%!
XL0"JB+(VmCY+86R8SH[a+`[`!3#)d'!L5Z[a16R8SH[`i`[`!3#)d'"$5Z[`i6R8
XSH[`Q`[`!3#)d'!3'J3#3!a"1G8kkrk)b+3!-5QN!#QB'6VVrZ'!%6VVreY+T!!j
X1G5"I-KJd',"B9mRrqNT#Crj1m#$m)&mb'$3BX*KAbIrk5N*RrNl`)2SJAc)B0"L
X`3Qi+N!""E3E33%(`!!)`%'Iq6[!!!#![!!3[33!%)Lm!##pI!!4)jc`!*!!Q!8K
X#a--S!#S"5%A)aG4%5%+3!m$"d)*-h`!m)Kp1G5![!!3[33!%)Lm!##pI!!4)jc%
X!6VS!R%cI!)`L(dje)#m!"#p"!!3L,`!),em!"%MR-3"1ZJ"m)!&-h`#-)Kp1G5!
X[!!3[33!%)Lm!##pI!!4)jc%!6VS!,%cI!)`L(dje)#m!"#p"!!3L,`!),em!"%M
XR-3"1ZJ!-)!&-h`#-)Kp1G8U!DKa+J@S-4)"%J8kk!#"%J8je4)"1ZJ!@4)"%J8j
Xe5S&U#N5"6VS!"N5!6R8Z2!!!rrqbJ'-')J"`!%jeX)GL$)$"5%!b!%*!5%"1GE+
X(BKSZ!%*!5%#!`8K!5%Fq!%K(MX%`"dK(-JG1G53!*J(LL1+*XSGLq)$"`)Fb!m,
X!,J0)4ml!5%I5Kf8)NS*L"%5"6R963'$NIJ"4q!TH@Bm["Mm(UD!J(fF!!+iQ3&Q
X2,`ZTT5BI)!XS!e*(ldG54cS(B"CCMbm'2`HTS#!IC`!!L&*("S3!!(rq9Bm[!+Q
XQ-"m)!!!&CYa3q!THcd@D4fBF)!1J3#m,UD)J%fF!!&S[#kQ5+&-J5k!TF!&1G5!
X%S4iJ#'F!!%)S5#m,UD)J%fF!!$BJ5b!$B"KCMbm'2`HTS#!IC`!!)P*()%!J2!!
X!Iri[##"3)NcC`+!ZUD04cIrDQF3Q6(!"6R8J5dT&CJ5J)djeS"p1G6)mUI"$q[V
X'6VS!D$)mUI*$q[XS6VS!A$)mUI0$q[XF6VS!8$)mUI4$q[X)6[S!4#m))'m!##p
XS!!)!##"i!UC`$0#3!,#i!UTQ*%kk!'3b2+R`6VS!4$)mUI*1ZJ!m-MbTmdkk!$3
Xb2+Rd6VS!,#"I6R8`!D&'*%K`$%Ti!SjU"+8HB!+K(M!"S%F`r%kj)-N`r%lj)-T
X1G6!"S8BLD!!)S"m`!5"*S%G1G3#3"%je)$Vrq'F%)%"#N!"1G3#3$#*krAc5NC*
X+de*1G6)B6VS"$NAe%!$9f$3BCc)L''iNC`j53@B8-LMrp%kk!4CJ'$)Srr41ZJ$
XSB!ib+2rd6VS!m'!'6VS"%0+0dj*1G5)B6VS""0056R8JH[d3)$Vp%%US!!"R+$)
XS!#KR)L3S!"KC3N2Y!"$6k!!%e9Nbr$mm3KN5k!!p-[bTm&&"CZa"k!"!")!!N!0
X!CXC1G5"kr-`J1[c-F[pd!%US!!"R',iS!$eQ%MBS!#KR$04$XUJ!"'8%)LJ!"%(
XS!%!%J!#3!d"QeL"kr+SJ8!4"!"!``HC+--*1G9Q2,ca$6d4&2`HTS#"I82J+AL!
X)6R8SH[af)R3B!*2X!$M6c%je+(VmAX,m!%!L0"JB+(VmCY+86R8SH[a+`[`!3#)
Xd'!L5Z[a16R8SH[`i`[`!3#)d'"$5Z[`i6R8SH[`Q`[`!3#)d'!3'J3#3!a"1G8k
Xkrk)b+3!-5QN!#QB'6VVrZ'!%6VVreY+T!!j1G5"I-KJd',"B9mRrqNT#Crj1m#$
Xm)&mb'$3BX*KAbIrk5N*RrNl`)2SJAc)B0"L`3Qi+N!""E3E33%(`!!)`%'Iq6[!
X!!#![!!3[33!%)Lm!##pI!!4)jc`!*!!Q!8K#a--S!#S"5%A)aG4%5%+3!m$"d)*
X-h`!m)Kp1G5![!!3[33!%)Lm!##pI!!4)jc%!6VS!R%cI!)`L(dje)#m!"#p"!!3
XL,`!),em!"%MR-3"1ZJ"m)!&-h`#-)Kp1G5![!!3[33!%)Lm!##pI!!4)jc%!6VS
X!,%cI!)`L(dje)#m!"#p"!!3L,`!),em!"%MR-3"1ZJ!-)!&-h`#-)Kp1G8U!DKa
X+J@S-4)"%J8kk!#"%J8je4)"1ZJ!@4)"%J8je5S&U#N5"6VS!"N5!6R8Z2!!!rrq
XbJ'-')J"`!%jeX)GL$)$"5%!b!%*!5%"1GE+(BKSZ!%*!5%#!`8K!5%Fq!%K(MX%
X`"dK(-JG1G53!*J(LL1+*XSGLq)$"`)Fb!m,!,J0)4ml!5%I5Kf8)NS*L"%5"6R9
X63'$NIJ"4q!TH@Bm["Mm(UD!J(fF!!+iQ3&Q2,`ZTT5BI)!XS!e*(ldG54cS(B"C
XCMbm'2`HTS#!IC`!!L&*("S3!!(rq9Bm[!+QQ-"m)!!!&CYa3q!THcd@D4fBF)!1
XJ3#m,UD)J%fF!!&S[#kQ5+&-J5k!TF!&1G5!%S4iJ#'F!!%)S5#m,UD)J%fF!!$B
XJ5b!$B"KCMbm'2`HTS#!IC`!!)P*()%!J2!!!Iri[##"3)NcC`+!ZUD04cIrDQF3
XQ6(!"6R8J5dT&CJ5J)djeS"p1G6)mUI"$q[V'6VS!D$)mUI*$q[XS6VS!A$)mUI0
X$q[XF6VS!8$)mUI4$q[X)6[S!4#m))'m!##pS!!)!##"i!UC`$0#3!,#i!UTQ*%k
Xk!'3b2+R`6VS!4$)mUI*1ZJ!m-MbTmdkk!$3b2+Rd6VS!,#"I6R8`!D&'*%K`$%T
Xi!SjU"+8HB!+K(M!"S%F`r%kj)-N`r%lj)-T1G6!"S8BLD!!)S"m`!5"*S%G1G3#
X3"%je)$Vrq'F%)%"#N!"1G3"%-MbTmNkk!$`b2+Rc6VS!0$)mUI41ZJ!X)&p1G6!
X"S8BN5(!-5RJ#MQS%T4jJ!U%H-!'J4c$m6VNJb6$m6[NJbNje-!'K4L*S!!LJ(c!
X")%QJ4dje!*!%6R8J1[riC`3J3%+3!%je!*!6#J#3$$J!!$1+U!!c8ZJ!-e1%!!!
X$B!#3"6)!N"C!J1j1!$05k%!!!0!!-e+d!*!&-e,`!$05p!!c8[J!-e,m!$06!!!
Xc8`3!-e-)!$06$!!c8a!!-e-8!$06'!!c8a`!-e-J!$06*!!c8bJ!-e-X!$06-!!
Xc8c3!-e-i!$062!!c8d!!-e0%!$065!!c8d`!-e03!$069!!c8eJ!-e0F!$06B!!
Xc8f3!-e0S!$06E!!c8h!!-e0d!$06H!!c8h`!-e1!!$1(+!!cJN`!-hcF!$0ff!!
XcESJ!-f$)!$0BR!!c8m!!-fNB!$0Z9!!cEL3!-fhdJ!!%h!#3!r!#!!N*!!%!!2q
X3#+)H5`d!'!!"!!!Te8e"3dB!#@eKBfCTE'8ZB`!!!D#Fc@fJR-eYS*c0E3!D!!)
X!!#Iq68&$5!%+6@&M5'9KC'9bF`#3!`'L,DLkSLfSZU)YZVF!'!!"!!!TeN026NB
X!#'0[EQCTCbjS!(-!!U)H([HL(KlhSKiHp`!D!!%!!#R@9&*"4!!+G(*KC(0dC'-
XZD!#3!`+L(Ke&SKiG4D)H(88!'!!"!!!TeNG-6d)!#'GXEf*KE#jS!'J!!k$(pEH
XJar@hS-IeY`!@!!)!!#KJ8e4%53%(Fh4ND@mZD!!!!k)H'rQL(K[jSKiEq3!@!!%
X!!#R@3dp28J!(Bfp[FQ3ZD!!!!k)R#q+L*`[LSLF,iJ!B!!%!!#R@68&$3`!*E@&
XMBfpZCLjS!!!%SKiH"U)H(JDL(Ki'!"B!!3!!+GC08d42!!GYFf4[FbjS!!!%SKi
XHdk)H(Y1L(Kl6!"J!!3!!+GC6@908!!KcHA0dC@dZD!#3!`5JR0hPS*cGjD#FhH8
X!&J!#!!!SB&4*688""R4TE@8ZD!"S!!5JR0dhS*cG0k#Fh6F!&J!#!!!SB%C$6P3
X""dCMER4X,QJ!!!5JR0fXS*cGV+#FhD`!'!!#!!!SB&084%3"#&0dC'4PCLjS!*!
X$"+#FhG@JR0h9S*cGe3!B!!)!!#KJ8e4%6!%)8h4NE'PL,QJ!N!-%S-IdfD$(p0Q
XJar6C!"J!!J!!+'"69&**!3K6G(*TEQFZD!#3!`5JR-e$S*c03k#Fc8-!'!!#!!!
XS!e""8d-"#("KFf0KE#jS!*!$"+#FaLHJR-BRS*c'*`!D!!)!!#J$899*3`%,8A9
XTBfYNFQ&h,QJ!!!5JR-AQS*c&jU#FaHB!'!!#!!!S!dC26P3"#8C[ER40Ch)ZD!!
X!"+#FaG@JR-A9S*c&e3!D!!)!!#J$49C&6J%+4ACPER40Ch)ZD!#3!`5JR-ClS*c
X'Hk#FaRX!'J!#!!!S!eG*6N3"#eGTEQ4[GdeRFLjS!!!%S*c'"+#FaJ5JR-B%!"J
X!!J!!+!0048j9!3P0C@je6@Gb,QJ!!!5JR-CIS*c'Ak#FaPm!(!!#!!!S!e084%B
X"$&0dC%CTE'93DfFZD!#3!`5JR-BrS*c'2k#FaMm!(!!#!!!S!e0&4dd"$&0PCfe
XPER4-C()ZD!#3!`5JR-CYS*c'ED#FaQd!(!!#!!!S!e426d`"$94[EfaLEhK9G'P
XX,QJ!!!5JR-B1S*c'$U#FaJi!'!!#!!!S!dp6993"#%p69A4TE#jS!'N!"+#FaF1
XJR-A$S*c&``!D!!)!!#J$4%P"6!%,4'PKE'pR6@Gb,QJ!!!5JR-ADS*c&fU#FaGS
X!'!!#!!!S!dC*6%8"#8CTE'90Ch)ZD!!!"+#FaHbJR-AXS*c&l!!8!!)!!#J$5%C
X6,J%&5%C6,QJ!!!5JX6d9S,%p&D#a248!&J!#!!!S!d026%m""d0[E'pb,QJ!!!5
XJR-BVS*c'+k#FaLX!(!!#!!!S!e*&8dm"$9*PFfpeFQ0P6@Gb,QJ!!!5L+DM@SLQ
XSeU)TU0B!'!!"!!!TeN9B9%8!#'9iG'9bELjS!'F!"+)H'jUL(KZDSKiEQJ!D!!%
X!!#R@68&$33!+6@&M3@aPFR3ZD!!ZJJ!),!#3!q`#!!N*!!%!!2q3#+)YR58!'J!
X"!!!Te8a&9Pm!#QaPGPpMEfe`,Q-!N!-"S*c0ED#Fc@fJR-eY!"S!!J!!*rj0380
X)!3T0B@0)C@&NCA*c!*!$!D)H(9fL(KeGSKiGA3!@!!%!!#R@5%&$5`!'D'&MDbj
XS!'8!!U)YU,UL,DLkSLfkY`!B!!%!!#R@3dp14J!)BfpZCQPR,QJ!F`!$SKiHpk)
XH([HL(Klh!"S!!3!!+GC88N&%!!TdFQ&NFh4NBbjS!*!$!k)H(8@L(Ke&SKiG43!
XB!!%!!#R@4da23J!)Cfa[BQ&X,QJ!D!!%S-IeYk$(pEHJar@h!"B!!J!!+'"69%4
X*!3GcG'4TEbjS!!!%SKiEqD)H'rQL(K[j!"B!!3!!+GC$6dp5!!GMEfpbC#jS!!!
X%SLF,iU)R#q+L*`[L!"J!!3!!+GC0380$!!PYB@0MEfjQ,QJ!!!@L(Ki'SKiH"U)
XH(JB!&J!"!!!TeNe64%m!"fecC'pc,QJ!!!@L(Kl6SKiHdk)H(Y-!'!!"!!!TeP0
XC8e3!#(0jFh4PE5jS!*!$"D#FhH@JR0hPS*cGj3!@!!)!!#KJ9%P043%'G'PYC5j
XS!'J!"D#Fh6HJR0dhS*cG0`!@!!)!!#KJ4N019!%(4Q0ZG'`ZD!!!"D#FhDbJR0f
XXS*cGV!!B!!)!!#KJ8e4%4!%)8h4NC'9Q,QJ!N!-&S*cGeD#FhG@JR0h9!"J!!J!
X!+'"69%4-!3K6G'4XD@)ZD!#3!`@Jar6CS-IdfD$(p0N!'!!#!!!SB&088NN"#&0
XdFQPZCbjS!*!$"D#Fc81JR-e$S*c03`!B!!)!!#J$8%&63`%)F'&cBf&X,QJ!N!-
X&S*c'*k#FaLHJR-BR!"S!!J!!+!0498P$!3Y4G@PMDf4bBAFZD!!!"D#FaHDJR-A
XQS*c&jJ!B!!)!!#J$4Np19!%*4QpZG%eRFLjS!!!&S*c&eD#FaG@JR-A9!"S!!J!
X!+!0&9N91!3T&GQ9ZG%eRFLjS!*!$"D#FaRZJR-ClS*c'H`!D!!)!!#J$9dP14!%
X,9fPZC'ph6@Gb,QJ!!!@JR-B%S*c'"+#FaJ3!'!!#!!!S!de&6P8"#8ePER90Ch)
XZD!!!"D#FaPqJR-CIS*c'A`!F!!)!!#J$8e4%4J%-8h4N4QPXC9"VCbjS!*!$"D#
XFaMqJR-BrS*c'2`!F!!)!!#J$8d9(63%-8f9RE@9ZG%aNFLjS!*!$"D#FaQfJR-C
XYS*c'E3!F!!)!!#J$9%p26!%09'p[E'*[H&9dD@`ZD!!!"D#FaJkJR-B1S*c'$J!
XB!!)!!#J$6e099!%)6e09G'PX,QJ!D3!&S*c&`k#FaF1JR-A$!"S!!J!!+!0%58&
X-!3Y%D@&XEfG0Ch)ZD!!!"D#FaGUJR-ADS*c&fJ!B!!)!!#J$4NP-43%*4QPXC8e
XRFLjS!!!&S*c&l+#FaHbJR-AX!"3!!J!!+!0)4P-Z!39)4P-ZD!!!"D#a24@JX6d
X9S,%p&3!@!!)!!#J$3dp-6`%(3fpXEh)ZD!!!"D#FaLZJR-BVS*c'+`!F!!)!!#J
X$8N966`%08Q9cEh9bBf90Ch)ZD!!!"D)TU0DL+DM@SLQSeJ!B!!%!!#R@49K843!
X)CAKdCA*Z,QJ!C`!&SKiEQU)H'jUL(KZD!"S!!3!!+GC0380"!!T0B@0"E'9bG#j
XS!#i!!U)H("HL(K`ASKiF&`!@!!%!!#R@4%9$6!!'C'9ME#jS!(3!!k)H(UQL(Kk
XTSKiHU3!@!!%!!#R@8e"&6!!(Fh"PE'`ZD!!!!k)H'm1L(K[$SKiE``!@!!%!!#R
X@3dp-6`!(BfpXEh)ZD!!!!k)H(KZL(KiESKiH'`!8!!%!!#R@6d*+,J!&Ef*U,QJ
X!!!1L(KpYSKiIED)H(fd!&!!"!!!TePP295i!"AP[G5jS!!!%SKiE[+)H'lbL(KZ
Xm!"J!!3!!+GC"9&45!!KKG(4bD@)ZD!"S!!5L(KhdSKiGp+)H(I3!&J!"!!!TeNe
X26P-!"fe[ER0d,QJ!!!5L(Kq*SKiILD)H(iN!'!!"!!!TePP299!!#AP[GA"bEh!
XZD!!!"D)H(QQL(KjTSKiHD3!@!!%!!#R@8&*28!!'F(*[F#jS!#i!"D)H(Q'L(Kj
XKSKiHB3!D!!%!!#R@8%9563!+F'9bE@pZFh3ZD!!Z!!DL(KfUSKiGUU)H(DS!'!!
X"!!!TeNe26N%!#@e[EQ&dG'XZD!!!"U)H(H+L(KhLSKiGiJ!B!!%!!#R@68p14J!
X*E@pZCQaKCbjS!!!&SLabkU)XFZUL,(,U!"3!!3!!+GC365j)!!4`E5jS!'%!!k)
XXF['L,(,aSLabm3!B!!%!!#R@6dj"63!)EfjKE@9c,QJ!N!-#SKiH!D)H(J'L(Ki
X"!"J!!3!!+GC06dj6!!KYEfjcH@dZD!#3!`+L(KfBSKiGQ+)H(CJ!'!!"!!!TeNe
X,8Nm!#'eVFQp[E5jS!*!$!U)H(LkL(KiZSKiH,J!D!!%!!#R@6d*+3`!+Ef*UBfa
XKFh-ZD!!Z!!+L(Ke*SKiG5D)H(8N!&J!"!!!TeNG26%3!"QG[E'3ZD!"c!!+L,(,
XMSLabik)XFZ-!&J!"!!!TeP4539!!"R4bBA!ZD!"c!!+L(KdQSKiG*U)H(5B!&J!
X"!!!TeNC-38F!"QCXB@FZD!"c!!+L(KkCSKiHQD)H(TN!&!!"!!!TeP*0,NJ!"(*
XY,QJ!D!!"SKiHTU)H(UDL(KkQ!"J!!3!!+GC68&p-!!KcF&pXCABZD!"S!"b!!!K
X3!*!$k!)!#3N!!3!!rj!)SLfEh!!B!!%!!#R96%9@A`!*E'9fAfaPH#jM!!!"S*c
X0ED#Fc@fJR-eY!"S!!J!!*rj0380)!3T0B@0)C@&NCA*c!*!$!D$(pEHJar@hS-I
XeY`!@!!)!!#KJ8e4%53!(Fh4ND@mZD!!!!D)H(9fL(KeGSKiGA3!@!!%!!#R@5%&
X$5`!'D'&MDbjS!*!$!U)YU,UL,DLkSLfkY`!B!!%!!#R@3dp14J!)BfpZCQPR,QJ
X!F`!$SKiHpk)H([HL(Klh!"S!!3!!+GC88N&%!!TdFQ&NFh4NBbjS!*!$!k)H(8@
XL(Ke&SKiG43!B!!%!!#R@4da23J!)Cfa[BQ&X,QJ!D!!%SKiEqD)H'rQL(K[j!"B
X!!3!!+GC$6dp5!!GMEfpbC#jS!!!%SLF,iU)R#q+L*`[L!"J!!3!!+GC0380$!!P
XYB@0MEfjQ,QJ!!!@L(Ki'SKiH"U)H(JB!&J!"!!!TeNe64%m!"fecC'pc,QJ!!!@
XL(Kl6SKiHdk)H(Y-!'!!"!!!TeP0C8e3!#(0jFh4PE5jS!*!$"D#FhH@JR0hPS*c
XGj3!@!!)!!#KJ9%P043%'G'PYC5jS!'J!"D#Fh6HJR0dhS*cG0`!@!!)!!#KJ4N0
X19!%(4Q0ZG'`ZD!!!"D#FhDbJR0fXS*cGV!!B!!)!!#KJ8e4%4!%)8h4NC'9Q,QJ
X!N!-&S*cGeD#FhG@JR0h9!"J!!J!!+'"69%4-!3K6G'4XD@)ZD!#3!`@Jar6CS-I
XdfD$(p0N!'!!#!!!SB&088NN"#&0dFQPZCbjS!*!$"D#Fc81JR-e$S*c03`!B!!)
X!!#J$8%&63`%)F'&cBf&X,QJ!N!-&S*c'*k#FaLHJR-BR!"S!!J!!+!0498P$!3Y
X4G@PMDf4bBAFZD!!!"D#FaHDJR-AQS*c&jJ!B!!)!!#J$4Np19!%*4QpZG%eRFLj
XS!!!&S*c&eD#FaG@JR-A9!"S!!J!!+!0&9N91!3T&GQ9ZG%eRFLjS!*!$"D#FaRZ
XJR-ClS*c'H`!D!!)!!#J$9dP14!%,9fPZC'ph6@Gb,QJ!!!@JR-B%S*c'"+#FaJ3
X!'!!#!!!S!de&6P8"#8ePER90Ch)ZD!!!"D#FaPqJR-CIS*c'A`!F!!)!!#J$8e4
X%4J%-8h4N4QPXC9"VCbjS!*!$"D#FaMqJR-BrS*c'2`!F!!)!!#J$8d9(63%-8f9
XRE@9ZG%aNFLjS!*!$"D#FaQfJR-CYS*c'E3!F!!)!!#J$9%p26!%09'p[E'*[H&9
XdD@`ZD!!!"D#FaJkJR-B1S*c'$J!B!!)!!#J$6e099!%)6e09G'PX,QJ!D3!&S*c
X&`k#FaF1JR-A$!"S!!J!!+!0%58&-!3Y%D@&XEfG0Ch)ZD!!!"D#FaGUJR-ADS*c
X&fJ!B!!)!!#J$4NP-43%*4QPXC8eRFLjS!!!&S*c&l+#FaHbJR-AX!"3!!J!!+!0
X)4P-Z!39)4P-ZD!!!"D#a24@JX6d9S,%p&3!@!!)!!#J$3dp-6`%(3fpXEh)ZD!!
X!"D#FaLZJR-BVS*c'+`!F!!)!!#J$8N966`%08Q9cEh9bBf90Ch)ZD!!!"D)TU0D
XL+DM@SLQSeJ!B!!%!!#R@49K843!)CAKdCA*Z,QJ!C`!&SKiEQU)H'jUL(KZD!"S
X!!3!!+GC0380"!!T0B@0"E'9bG#jS!#i!!U)H("HL(K`ASKiF&`!@!!%!!#R@4%9
X$6!!'C'9ME#jS!(3!!k)H(UQL(KkTSKiHU3!@!!%!!#R@8e"&6!!(Fh"PE'`ZD!!
X!!k)H'm1L(K[$SKiE``!@!!%!!#R@3dp-6`!(BfpXEh)ZD!!!!k)H(KZL(KiESKi
XH'`!8!!%!!#R@6d*+,J!&Ef*U,QJ!!!1L(KpYSKiIED)H(fd!&!!"!!!TePP295i
X!"AP[G5jS!!!%SKiE[+)H'lbL(KZm!"J!!3!!+GC"9&45!!KKG(4bD@)ZD!"S!!5
XL(KhdSKiGp+)H(I3!&J!"!!!TeNe26P-!"fe[ER0d,QJ!!!5L(Kq*SKiILD)H(iN
X!'!!"!!!TePP299!!#AP[GA"bEh!ZD!!!"D)H(QQL(KjTSKiHD3!@!!%!!#R@8&*
X28!!'F(*[F#jS!#i!"D)H(Q'L(KjKSKiHB3!D!!%!!#R@8%9563!+F'9bE@pZFh3
XZD!!Z!!DL(KfUSKiGUU)H(DS!'!!"!!!TeNe26N%!#@e[EQ&dG'XZD!!!"U)H(H+
XL(KhLSKiGiJ!B!!%!!#R@68p14J!*E@pZCQaKCbjS!!!&SLabkU)XFZUL,(,U!"3
X!!3!!+GC365j)!!4`E5jS!'%!!k)XF['L,(,aSLabm3!B!!%!!#R@6dj"63!)Efj
XKE@9c,QJ!N!-#SKiH!D)H(J'L(Ki"!"J!!3!!+GC06dj6!!KYEfjcH@dZD!#3!`+
XL(KfBSKiGQ+)H(CJ!'!!"!!!TeNe,8Nm!#'eVFQp[E5jS!*!$!U)H(LkL(KiZSKi
XH,J!D!!%!!#R@6d*+3`!+Ef*UBfaKFh-ZD!!Z!!+L(Ke*SKiG5D)H(8N!&J!"!!!
XTeNG26%3!"QG[E'3ZD!"c!!+L,(,MSLabik)XFZ-!&J!"!!!TeP4539!!"R4bBA!
XZD!"c!!+L(KdQSKiG*U)H(5B!&J!"!!!TeNC-38F!"QCXB@FZD!"c!!+L(KkCSKi
XHQD)H(TN!&!!"!!!TeP*0,NJ!"(*Y,QJ!D!!"SKiGCk)H(@HL(KeR!"S!!3!!+GC
X-49CI!!TXCACIBfpYF#jS!#i!!D)H(UDL(KkQSKiHTJ!B!!%!!#R@8e"I6!!)Fh"
XIE'9f,QJ!D))!"0`!N!2d!J!*#3!"!!$rN!LL(LA[!"B!!3!!+G9"6%a2!!GKE'a
X[BbjM!!!"S*c0ED#Fc@fJR-eY!"S!!J!!*rj0380)!3T0B@0)C@&NCA*c!'%!!D)
XYU,UL,DLkSLfkY`!B!!%!!#R@3dp14J!)BfpZCQPR,QJ!F`!#SKiHpk)H([HL(Kl
Xh!"S!!3!!+GC88N&%!!TdFQ&NFh4NBbjS!'%!!U)H(8@L(Ke&SKiG43!B!!%!!#R
X@4da23J!)Cfa[BQ&X,QJ!D!!$S-IeYk$(pEHJar@h!"B!!J!!+'"69%4*!3GcG'4
XTEbjS!!!$SKiEqD)H'rQL(K[j!"B!!3!!+GC$6dp5!!GMEfpbC#jS!!!$SLF,iU)
XR#q+L*`[L!"J!!3!!+GC0380$!!PYB@0MEfjQ,QJ!!!5L(Ki'SKiH"U)H(JB!&J!
X"!!!TeNe64%m!"fecC'pc,QJ!!!5L(Kl6SKiHdk)H(Y-!'!!"!!!TeP0C8e3!#(0
XjFh4PE5jS!*!$"+#FhH@JR0hPS*cGj3!@!!)!!#KJ9%P043%'G'PYC5jS!'J!"+#
XFh6HJR0dhS*cG0`!@!!)!!#KJ4N019!%(4Q0ZG'`ZD!!!"+#FhDbJR0fXS*cGV!!
XB!!)!!#KJ8e4%4!%)8h4NC'9Q,QJ!N!-%S*cGeD#FhG@JR0h9!"J!!J!!+'"69%4
X-!3K6G'4XD@)ZD!#3!`5Jar6CS-IdfD$(p0N!'!!#!!!SB&088NN"#&0dFQPZCbj
XS!*!$"+#Fc81JR-e$S*c03`!B!!)!!#J$8%&63`%)F'&cBf&X,QJ!N!-%S*c'*k#
XFaLHJR-BR!"S!!J!!+!0498P$!3Y4G@PMDf4bBAFZD!!!"+#FaHDJR-AQS*c&jJ!
XB!!)!!#J$4Np19!%*4QpZG%eRFLjS!!!%S*c&eD#FaG@JR-A9!"S!!J!!+!0&9N9
X1!3T&GQ9ZG%eRFLjS!*!$"+#FaRZJR-ClS*c'H`!D!!)!!#J$9dP14!%,9fPZC'p
Xh6@Gb,QJ!!!5JR-B%S*c'"+#FaJ3!'!!#!!!S!de&6P8"#8ePER90Ch)ZD!!!"+#
XFaPqJR-CIS*c'A`!F!!)!!#J$8e4%4J%-8h4N4QPXC9"VCbjS!*!$"+#FaMqJR-B
XrS*c'2`!F!!)!!#J$8d9(63%-8f9RE@9ZG%aNFLjS!*!$"+#FaQfJR-CYS*c'E3!
XF!!)!!#J$9%p26!%09'p[E'*[H&9dD@`ZD!!!"+#FaJkJR-B1S*c'$J!B!!)!!#J
X$6e099!%)6e09G'PX,QJ!D3!%S*c&`k#FaF1JR-A$!"S!!J!!+!0%58&-!3Y%D@&
XXEfG0Ch)ZD!!!"+#FaGUJR-ADS*c&fJ!B!!)!!#J$4NP-43%*4QPXC8eRFLjS!!!
X%S*c&l+#FaHbJR-AX!"3!!J!!+!0)4P-Z!39)4P-ZD!!!"+#a24@JX6d9S,%p&3!
X@!!)!!#J$3dp-6`%(3fpXEh)ZD!!!"+#FaLZJR-BVS*c'+`!F!!)!!#J$8N966`%
X08Q9cEh9bBf90Ch)ZD!!!"+)TU0DL+DM@SLQSeJ!B!!%!!#R@49K843!)CAKdCA*
XZ,QJ!C`!%SKiEQU)H'jUL(KZD!"S!!3!!+GC0380"!!T0B@0"E'9bG#jS!#kL(S!
X!!$!!!!%!N!-*#3!"!!$rN!LJb!28!"3!!J!!+&P"6P0*!!4"6P0*!!#!!!!`!*!
X$r!!!#3N!!3!!rj!)S-J0[!!8!!)!!#KC98j*@!!%G@jTH!!!J!!!0!#3!rJ!!!N
X*!!%!!2q3#+#Z`J)!'!!#!!!S"8e"3e3!#%eKBe4bBA"c!!#!!!K3!*!$j!)!#3N
X!!3!!rj!)SLfF,!!D!!%!!#R96%9@A`!+E'9fAfeKD@iZB`#3!`'JR-eYS*c0ED#
XFc@d!'J!#!!!RrNe"3dJ"#NeKBdKPB@4PFR-!N!-"SKiGAD)H(9fL(KeG!"B!!3!
X!+GC)380,!!CSB@0V,QJ!C3!#SLfSZU)YU,UL,EUh!"J!!3!!+GC$6dj'!!KMEfj
XQD@FZD!"c!!1L(KlhSKiHpk)H([F!'J!"!!!TeP45383!#R4bB@4cG'4M,QJ!N!-
X$SKiG4D)H(8@L(Ke&!"J!!3!!+GC(6%p#!!KRE'pLB@`ZD!"S!!5Jar@hS-IeYk$
X(pEF!&J!#!!!SB&084%N""h0dC'P[,QJ!!!5L(K[jSKiEqD)H'rN!&J!"!!!TeN0
X26e)!"f0[Eh*N,QJ!!!5L*`[LSLF,iU)R#q)!'!!"!!!TeNe"3d-!#@eKBf0[EQB
XZD!!!"D)H(JDL(Ki'SKiH"J!@!!%!!#R@690%6`!(EA0NEh-ZD!!!"D)H(Y1L(Kl
X6SKiHd`!B!!%!!#R@8eP69!!)FhPcG'9Y,QJ!N!-&S*cGjD#FhH@JR0hP!"B!!J!
X!+'"858e&!3CdD@eP,QJ!D!!&S*cG0k#Fh6HJR0dh!"B!!J!!+'"'3dj8!3G'Bfj
XdE#jS!!!&S*cGV+#FhDbJR0fX!"J!!J!!+'"69%4%!3K6G'4NC@BZD!#3!`@JR0h
X9S*cGeD#FhG8!'!!#!!!SB&084%`"#&0dC'aTBLjS!*!$"D$(p0QJar6CS-Idf3!
XB!!)!!#KJ8e4553%)8h4bD@jR,QJ!N!-&S*c03k#Fc81JR-e$!"J!!J!!+!03390
X$!3K`BA0MB@`ZD!#3!`@JR-BRS*c'*k#FaLF!'J!#!!!S!e&958-"#e&eD@0VC(*
XKGbjS!!!&S*c&jU#FaHDJR-AQ!"J!!J!!+!0'6dj8!3P'Efjd6@Gb,QJ!!!@JR-A
X9S*c&eD#FaG8!'J!#!!!S!d9@48i"#N9fC@jd6@Gb,QJ!N!-&S*c'Hk#FaRZJR-C
Xl!"S!!J!!+!0A58j%!3YAD@jNEhG0Ch)ZD!!!"D#FaJ5JR-B%S*c'"!!B!!)!!#J
X$689193%*6@9ZG8eRFLjS!!!&S*c'Ak#FaPqJR-CI!"`!!J!!+!069%4'!3a6G'4
X'D@aP8'YR,QJ!N!-&S*c'2k#FaMqJR-Br!"`!!J!!+!0648G0!3a6C@GYC@jd6'4
Xb,QJ!N!-&S*c'ED#FaQfJR-CY!"`!!J!!+!086dp-!3e8EfpXBQpi9A4TE#jS!!!
X&S*c'$U#FaJkJR-B1!"J!!J!!+!028e98!3K28e9dD@`ZD!"T!!@JR-A$S*c&`k#
XFaF-!'J!#!!!S!d4*38`"#d4TB@a[CdeRFLjS!!!&S*c&fU#FaGUJR-AD!"J!!J!
X!+!0'58a&!3P'D@aP6@Gb,QJ!!!@JR-AXS*c&l+#FaH`!&!!#!!!S!dK'8bi""8K
X'8bjS!!!&S,%p&D#a24@JX6d9!"B!!J!!+!0$6da2!3G$Efa[FLjS!!!&S*c'+k#
XFaLZJR-BV!"`!!J!!+!054902!3e5CA0[GA*MC8eRFLjS!!!&SLQSeU)TU0DL+DM
X@!"J!!3!!+GC&@&4&!!KPH(4PFQiZD!"R!!@L(KZDSKiEQU)H'jS!'J!"!!!TeNe
X"3d%!#NeKBd&XCA*d,QJ!,J!#SKiF&k)H("HL(K`A!"B!!3!!+GC%480-!!CNC@0
XX,QJ!G!!$SKiHUD)H(UQL(KkT!"B!!3!!+GC68%9-!!GcF'9XE#jS!!!$SKiE`k)
XH'm1L(K[$!"B!!3!!+GC$6da2!!GMEfa[FLjS!!!$SKiH'k)H(KZL(KiE!"3!!3!
X!+GC23NSZ!!9[BQSZD!!!!k)H(ffL(KpYSKiIE3!8!!%!!#R@@8p9,J!&H@pe,QJ
X!!!5L(KZmSKiE[+)H'l`!'!!"!!!TeN&89&)!#'&dG(*TBLjS!'J!"+)H(I5L(Kh
XdSKiGp!!@!!%!!#R@68p18`!(E@pZFh3ZD!!!"+)H(iQL(Kq*SKiIL3!B!!%!!#R
X@@8p98!!*H@peF(*[F#jS!!!&SKiHDD)H(QQL(KjT!"B!!3!!+GC38Np3!!C`FQp
X`,QJ!,J!&SKiHBD)H(Q'L(KjK!"S!!3!!+GC349*0!!T`CA*YEfjcG#jS!#i!"U)
XH(DUL(KfUSKiGUJ!B!!%!!#R@68p133!*E@pZBA4dDbjS!!!'SKiGiU)H(H+L(Kh
XL!"J!!3!!+GC06dj'!!PYEfjQE'&R,QJ!!!@L(Kh%SKiGa+)H(F3!'!!"!!!TeNe
X26N3!#@e[EQ4KG'%ZD!!!"D)XFZUL,(,USLabkJ!8!!%!!#R@8%dZ5!!%F'dZD!"
Xd!!1L,(,aSLabmD)XF[%!'!!"!!!TeNp138d!#'pZB@ePFbjS!*!$!U)H(J'L(Ki
X"SKiH!3!B!!%!!#R@68p18`!)E@pZFhPY,QJ!N!-#SKiGQ+)H(CLL(KfB!"J!!3!
X!+GC05e*2!!KYDh*[EfdZD!#3!`+L(KiZSKiH,U)H(Li!'J!"!!!TeNp#5N-!#Qp
XLDQ0XBA0c,QJ!,J!#SKiG5D)H(8QL(Ke*!"B!!3!!+GC(6da%!!CREfaN,QJ!F`!
X#SLabik)XFZ1L,(,M!"B!!3!!+GC88N&3!!CdFQ&`,QJ!F`!#SKiG*U)H(5DL(Kd
XQ!"B!!3!!+GC'6%&(!!CQE'&R,QJ!F`!#SKiHQD)H(TQL(KkC!"3!!3!!+GC565j
X)!!4bE5jS!'J!!D#Fh3DJR0d'S*cG"J!B!!)!!#KJ3dp18`%*BfpZFfpXC5jS!)!
X!"J3!N!2J!J!*#3!"!!$rN!LL(MID!"B!!3!!+G906dj6!!GYEfjcG#jM!!!"S*c
X0ED#Fc@fJR-eY!"S!!J!!*rj0380)!3T0B@0)C@&NCA*c!#i!!D)YU,UL,DLkSLf
XkY`!B!!%!!#R@3dp14J!)BfpZCQPR,QJ!F`!#SKiHpk)H([HL(Klh!"S!!3!!+GC
X88N&%!!TdFQ&NFh4NBbjS!#i!!U)H(8@L(Ke&SKiG43!B!!%!!#R@4da23J!)Cfa
X[BQ&X,QJ!D!!$S-IeYk$(pEHJar@h!"B!!J!!+'"69%4*!3GcG'4TEbjS!!!$SKi
XEqD)H'rQL(K[j!"B!!3!!+GC$6dp5!!GMEfpbC#jS!!!$SLF,iU)R#q+L*`[L!"J
X!!3!!+GC0380$!!PYB@0MEfjQ,QJ!!!5L(Ki'SKiH"U)H(JB!&J!"!!!TeNe64%m
X!"fecC'pc,QJ!!!5L(Kl6SKiHdk)H(Y-!'!!"!!!TeP0C8e3!#(0jFh4PE5jS!*!
X$"+#FhH@JR0hPS*cGj3!@!!)!!#KJ9%P043%'G'PYC5jS!'J!"+#Fh6HJR0dhS*c
XG0`!@!!)!!#KJ4N019!%(4Q0ZG'`ZD!!!"+#FhDbJR0fXS*cGV!!B!!)!!#KJ8e4
X%4!%)8h4NC'9Q,QJ!N!-%S*cGeD#FhG@JR0h9!"J!!J!!+'"69%4-!3K6G'4XD@)
XZD!#3!`5Jar6CS-IdfD$(p0N!'!!#!!!SB&088NN"#&0dFQPZCbjS!*!$"+#Fc81
XJR-e$S*c03`!B!!)!!#J$8%&63`%)F'&cBf&X,QJ!N!-%S*c'*k#FaLHJR-BR!"S
X!!J!!+!0498P$!3Y4G@PMDf4bBAFZD!!!"+#FaHDJR-AQS*c&jJ!B!!)!!#J$4Np
X19!%*4QpZG%eRFLjS!!!%S*c&eD#FaG@JR-A9!"S!!J!!+!0&9N91!3T&GQ9ZG%e
XRFLjS!*!$"+#FaRZJR-ClS*c'H`!D!!)!!#J$9dP14!%,9fPZC'ph6@Gb,QJ!!!5
XJR-B%S*c'"+#FaJ3!'!!#!!!S!de&6P8"#8ePER90Ch)ZD!!!"+#FaPqJR-CIS*c
X'A`!F!!)!!#J$8e4%4J%-8h4N4QPXC9"VCbjS!*!$"+#FaMqJR-BrS*c'2`!F!!)
X!!#J$8d9(63%-8f9RE@9ZG%aNFLjS!*!$"+#FaQfJR-CYS*c'E3!F!!)!!#J$9%p
X26!%09'p[E'*[H&9dD@`ZD!!!"+#FaJkJR-B1S*c'$J!B!!)!!#J$6e099!%)6e0
X9G'PX,QJ!D3!%S*c&`k#FaF1JR-A$!"S!!J!!+!0%58&-!3Y%D@&XEfG0Ch)ZD!!
X!"+#FaGUJR-ADS*c&fJ!B!!)!!#J$4NP-43%*4QPXC8eRFLjS!!!%S*c&l+#FaHb
XJR-AX!"3!!J!!+!0)4P-Z!39)4P-ZD!!!"+#a24@JX6d9S,%p&3!@!!)!!#J$3dp
X-6`%(3fpXEh)ZD!!!"+#FaLZJR-BVS*c'+`!F!!)!!#J$8N966`%08Q9cEh9bBf9
X0Ch)ZD!!!"+)TU0DL+DM@SLQSeJ!B!!%!!#R@49K843!)CAKdCA*Z,QJ!C`!%SKi
XEQU)H'jUL(KZD!"S!!3!!+GC0380"!!T0B@0"E'9bG#jS!#i!!D)H(Q'L(KjKSKi
XHB3!D!!%!!#R@8%9563!+F'9bE@pZFh3ZD!!Z!!+L(KfUSKiGUU)H(DS!'!!"!!!
XTeNe26N%!#@e[EQ&dG'XZD!!!!U)H(H+L(KhLSKiGiJ!B!!%!!#R@68p14J!*E@p
XZCQaKCbjS!!!"SKiH!D)H(J'L(Ki"!"J!!3!!+GC06dj6!!KYEfjcH@dZD!#3!`'
XL(K`hSKiF0k)H($F!&J!"!!!TeN965%X!"Q9cD'XZD!"S!!'L(Kp&SKiI4D)H(d8
X!&J!"!!!TePC"98`!"hCKG@ad,QJ!!!'L(K``SKiF-+)H($!!&J!"!!!TeN938NN
X!"Q9`FQNZD!#3!`'L(K[$SKiE`k)H'm-!&J!"!!!TeN026%m!"f0[E'pb,QJ!JJ!
X&F!#3!p`#!!N*!!%!!2q3#+)N!Zd!'!!"!!!Te8p#5N8!#@pLDQ9MG(-ZB`!!!D#
XFc@fJR-eYS*c0E3!D!!)!!#Iq68&$5!%+6@&M5'9KC'9bF`!Z!!'L,DLkSLfSZU)
XYZVF!'!!"!!!TeN026NB!#'0[EQCTCbjS!(-!!U)H([HL(KlhSKiHp`!D!!%!!#R
X@9&*"4!!+G(*KC(0dC'-ZD!!Z!!+L(Ke&SKiG4D)H(88!'!!"!!!TeNG-6d)!#'G
XXEf*KE#jS!'J!!k$(pEHJar@hS-IeY`!@!!)!!#KJ8e4%53%(Fh4ND@mZD!!!!k)
XH'rQL(K[jSKiEq3!@!!%!!#R@3dp28J!(Bfp[FQ3ZD!!!!k)R#q+L*`[LSLF,iJ!
XB!!%!!#R@68&$3`!*E@&MBfpZCLjS!!!%SKiH"U)H(JDL(Ki'!"B!!3!!+GC08d4
X2!!GYFf4[FbjS!!!%SKiHdk)H(Y1L(Kl6!"J!!3!!+GC6@908!!KcHA0dC@dZD!#
X3!`5JR0hPS*cGjD#FhH8!&J!#!!!SB&4*688""R4TE@8ZD!"S!!5JR0dhS*cG0k#
XFh6F!&J!#!!!SB%C$6P3""dCMER4X,QJ!!!5JR0fXS*cGV+#FhD`!'!!#!!!SB&0
X84%3"#&0dC'4PCLjS!*!$"+#FhG@JR0h9S*cGe3!B!!)!!#KJ8e4%6!%)8h4NE'P
XL,QJ!N!-%S-IdfD$(p0QJar6C!"J!!J!!+'"69&**!3K6G(*TEQFZD!#3!`5JR-e
X$S*c03k#Fc8-!'!!#!!!S!e""8d-"#("KFf0KE#jS!*!$"+#FaLHJR-BRS*c'*`!
XD!!)!!#J$899*3`%,8A9TBfYNFQ&h,QJ!!!5JR-AQS*c&jU#FaHB!'!!#!!!S!dC
X26P3"#8C[ER40Ch)ZD!!!"+#FaG@JR-A9S*c&e3!D!!)!!#J$49C&6J%+4ACPER4
X0Ch)ZD!#3!`5JR-ClS*c'Hk#FaRX!'J!#!!!S!eG*6N3"#eGTEQ4[GdeRFLjS!!!
X%S*c'"+#FaJ5JR-B%!"J!!J!!+!0048j9!3P0C@je6@Gb,QJ!!!5JR-CIS*c'Ak#
XFaPm!(!!#!!!S!e084%B"$&0dC%CTE'93DfFZD!#3!`5JR-BrS*c'2k#FaMm!(!!
X#!!!S!e0&4dd"$&0PCfePER4-C()ZD!#3!`5JR-CYS*c'ED#FaQd!(!!#!!!S!e4
X26d`"$94[EfaLEhK9G'PX,QJ!!!5JR-B1S*c'$U#FaJi!'!!#!!!S!dp6993"#%p
X69A4TE#jS!'N!"+#FaF1JR-A$S*c&``!D!!)!!#J$4%P"6!%,4'PKE'pR6@Gb,QJ
X!!!5JR-ADS*c&fU#FaGS!'!!#!!!S!dC*6%8"#8CTE'90Ch)ZD!!!"+#FaHbJR-A
XXS*c&l!!8!!)!!#J$5%C6,J%&5%C6,QJ!!!5JX6d9S,%p&D#a248!&J!#!!!S!d0
X26%m""d0[E'pb,QJ!!!5JR-BVS*c'+k#FaLX!(!!#!!!S!e*&8dm"$9*PFfpeFQ0
XP6@Gb,QJ!!!5L+DM@SLQSeU)TU0B!'!!"!!!TeN9B9%8!#'9iG'9bELjS!'F!"+)
XH'jUL(KZDSKiEQJ!D!!%!!#R@68&$33!+6@&M3@aPFR3ZD!!Z!!'L(KiESKiH'k)
XH(KX!&!!"!!!TeNp#5Li!"@pLDLjS!!!"SKiH,U)H(LkL(KiZ!"S!!3!!+GC23NT
X$!!T[BQTME'&cFbjS!#i!!D)H(QQL(KjTSKiHD3!@!!%!!#R@8&*28!!'F(*[F#j
XS!(-!!D)H'm1L(K[$SKiE``!@!!%!!#R@3dp-6`!(BfpXEh)ZD!!!!B)!"0`!N!2
XB!J!*#3!"!!$rN!LL(MXi!"B!!3!!+G9338j*!!G`B@jTBbjM!!!"S*c0ED#Fc@f
XJR-eY!"S!!J!!*rj0380)!3T0B@0)C@&NCA*c!#i!!D)YU,UL,DLkSLfkY`!B!!%
X!!#R@3dp14J!)BfpZCQPR,QJ!F`!#SKiHpk)H([HL(Klh!"S!!3!!+GC88N&%!!T
XdFQ&NFh4NBbjS!#i!!U)H(8@L(Ke&SKiG43!B!!%!!#R@4da23J!)Cfa[BQ&X,QJ
X!D!!$S-IeYk$(pEHJar@h!"B!!J!!+'"69%4*!3GcG'4TEbjS!!!$SKiEqD)H'rQ
XL(K[j!"B!!3!!+GC$6dp5!!GMEfpbC#jS!!!$SLF,iU)R#q+L*`[L!"J!!3!!+GC
X0380$!!PYB@0MEfjQ,QJ!!!5L(Ki'SKiH"U)H(JB!&J!"!!!TeNe64%m!"fecC'p
Xc,QJ!!!5L(Kl6SKiHdk)H(Y-!'!!"!!!TeP0C8e3!#(0jFh4PE5jS!*!$"+#FhH@
XJR0hPS*cGj3!@!!)!!#KJ9%P043%'G'PYC5jS!'J!"+#Fh6HJR0dhS*cG0`!@!!)
X!!#KJ4N019!%(4Q0ZG'`ZD!!!"+#FhDbJR0fXS*cGV!!B!!)!!#KJ8e4%4!%)8h4
XNC'9Q,QJ!N!-%S*cGeD#FhG@JR0h9!"J!!J!!+'"69%4-!3K6G'4XD@)ZD!#3!`5
XJar6CS-IdfD$(p0N!'!!#!!!SB&088NN"#&0dFQPZCbjS!*!$"+#Fc81JR-e$S*c
X03`!B!!)!!#J$8%&63`%)F'&cBf&X,QJ!N!-%S*c'*k#FaLHJR-BR!"S!!J!!+!0
X498P$!3Y4G@PMDf4bBAFZD!!!"+#FaHDJR-AQS*c&jJ!B!!)!!#J$4Np19!%*4Qp
XZG%eRFLjS!!!%S*c&eD#FaG@JR-A9!"S!!J!!+!0&9N91!3T&GQ9ZG%eRFLjS!*!
X$"+#FaRZJR-ClS*c'H`!D!!)!!#J$9dP14!%,9fPZC'ph6@Gb,QJ!!!5JR-B%S*c
X'"+#FaJ3!'!!#!!!S!de&6P8"#8ePER90Ch)ZD!!!"+#FaPqJR-CIS*c'A`!F!!)
X!!#J$8e4%4J%-8h4N4QPXC9"VCbjS!*!$"+#FaMqJR-BrS*c'2`!F!!)!!#J$8d9
X(63%-8f9RE@9ZG%aNFLjS!*!$"+#FaQfJR-CYS*c'E3!F!!)!!#J$9%p26!%09'p
X[E'*[H&9dD@`ZD!!!"+#FaJkJR-B1S*c'$J!B!!)!!#J$6e099!%)6e09G'PX,QJ
X!D3!%S*c&`k#FaF1JR-A$!"S!!J!!+!0%58&-!3Y%D@&XEfG0Ch)ZD!!!"+#FaGU
XJR-ADS*c&fJ!B!!)!!#J$4NP-43%*4QPXC8eRFLjS!!!%S*c&l+#FaHbJR-AX!"3
X!!J!!+!0)4P-Z!39)4P-ZD!!!"+#a24@JX6d9S,%p&3!@!!)!!#J$3dp-6`%(3fp
XXEh)ZD!!!"+#FaLZJR-BVS*c'+`!F!!)!!#J$8N966`%08Q9cEh9bBf90Ch)ZD!!
X!"+)TU0DL+DM@SLQSeJ!B!!%!!#R@49K843!)CAKdCA*Z,QJ!C`!%SKiEQU)H'jU
XL(KZD!"S!!3!!+GC0380"!!T0B@0"E'9bG#jS!#l03i!!!#J!N!28!*!&"`#3!bS
X!!3!(!*!$%J#3!`%!#!4YB@PZ)*!$!!!$B!!#!!!S!e&958-"#e&eD@0VC(*KGbj
XS!!!%S*c&jU#FaHDJR-AQ!"J!!J!!+!0'6dj8!3P'Efjd6@Gb,QJ!!!5JR-A9S*c
X&eD#FaG8!'J!#!!!S!d9@48i"#N9fC@jd6@Gb,QJ!N!-%S*c'Hk#FaRZJR-Cl!"S
X!!J!!+!0A58j%!3YAD@jNEhG0Ch)ZD!!!"+#FaJ5JR-B%S*c'"!!B!!)!!#J$689
X193%*6@9ZG8eRFLjS!!!%S*c'Ak#FaPqJR-CI!"`!!J!!+!069%4'!3a6G'4'D@a
XP8'YR,QJ!N!-%S*c'2k#FaMqJR-Br!"`!!J!!+!0648G0!3a6C@GYC@jd6'4b,QJ
X!N!-%S*c'ED#FaQfJR-CY!"`!!J!!+!086dp-!3e8EfpXBQpi9A4TE#jS!!!%S*c
X'$U#FaJkJR-B1!"J!!J!!+!028e98!3K28e9dD@`ZD!"T!!5JR-A$S*c&`k#FaF-
X!'J!#!!!S!d4*38`"#d4TB@a[CdeRFLjS!!!%S*c&fU#FaGUJR-AD!"J!!J!!+!0
X'58a&!3P'D@aP6@Gb,QJ!!!5JR-AXS*c&l+#FaH`!&!!#!!!S!dK'8bi""8K'8bj
XS!!!%S,%p&D#a24@JX6d9!"B!!J!!+!0$6da2!3G$Efa[FLjS!!!%S*c'+k#FaLZ
XJR-BV!"`!!J!!+!054902!3e5CA0[GA*MC8eRFLjS!!!%SLQSeU)TU0DL+DM@!"J
X!!3!!+GC&@&4&!!KPH(4PFQiZD!"R!!5L(KZDSKiEQU)H'jS!'J!"!!!TeNe"3d%
X!#NeKBd&XCA*d,QJ!,J!"SKiH'k)H(KZL(KiE!"3!!3!!+GC23NSZ!!9[BQSZD!!
X!!D)H(LkL(KiZSKiH,J!D!!%!!#R@6d*+3`!+Ef*UBfaKFh-ZD!!Z!!'L(KjTSKi
XHDD)H(QN!&J!"!!!TeP"56e!!"R"bEh!ZD!"c!!'L(K[$SKiE`k)H'm-!&J!"!!!
XTeN026%m!"f0[E'pb,QJ!!!%!N!0N6%9@A`!+E'9fAf0[EA!ZD!!Z!!'L(KkQSKi
XHTU)H(UB!'!!"!!!TeP03Ad`!#(0`AfaPGLjS!'J!N!-S+GC0380"!!T0B@0"E'9
XbG#jS!#i!N!-3!3e8EfpXBQpi9A4T!*!$$!!%S*c'$U#F!!!"!*!$6Ki!!%dH!!!
X"QJ!NEa3$VJ#3!a`"NJ!15%&65!#3!hTD6dj&!*!$KNY*6N3!N!159da23`#3!jj
X*6N4B!*!$UN024%8!!`#f4%&833#3!qC69&*6!*!$mN4548`!N!2q8eP08`!!!3T
X$6NC(!!!"&P0*@N8!!!%L3e*&6!!"!5j%3P9(!!%"4PK6@8d!!3&H!!%!N!FQlH`
X!!2rr!!!9'J!QlFJ!!2rr!!!$p!!QlH3!!2rr!!!)&!!QlHJ!!2rr!!!&8!!QlF`
X!!2rr!!!))!!QlF3!![rr!!!)K!!Ql@`!!rrr!!!)M!!Ql6`!!Irr&!!)[J!QlD`
X!!2rr!!!)P!!QlF!!!2rr!!!)Q!!QlEJ!!2rr!!!)R!!QlE`!!2rr!!!)S!!QlE3
X!![rr!!!9$!!QlG$rr`!'!!!)X!!QlG3!![rr!!!)T!!Ql9`!!rrr!!!)U!!Ql8`
X!![rr!!!)V!!QlA!!!rrr!!!2mJ!NETJ!![rr!!!2pJ!Ql-3!!rrr!!!2qJ!Ql9J
X&E@YKD'`"-KPm!:
END_OF_FILE
if test 25348 -ne `wc -c <'mac/SL.proj.hqx'`; then
    echo shar: \"'mac/SL.proj.hqx'\" unpacked with wrong size!
fi
# end of 'mac/SL.proj.hqx'
fi
if test -f 'src/read.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'src/read.c'\"
else
echo shar: Extracting \"'src/read.c'\" \(30153 characters\)
sed "s/^X//" >'src/read.c' <<'END_OF_FILE'
X/*	SCCS Id: @(#)read.c	3.0	89/11/15
X/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
X/* NetHack may be freely redistributed.  See license for details. */
X
X#include "hack.h"
X
X#ifdef OVLB
X
Xboolean	known;
X
Xstatic const char NEARDATA readable[] = { '#', SCROLL_SYM,
X#ifdef SPELLS
X	SPBOOK_SYM,
X#endif
X	0 };
X
Xstatic void FDECL(explode, (struct obj *));
Xstatic void NDECL(do_class_genocide);
Xstatic void FDECL(stripspe,(struct obj *));
Xstatic void FDECL(p_glow1,(struct obj *));
Xstatic void FDECL(p_glow2,(struct obj *,const char *));
Xstatic void FDECL(recharge,(struct obj *,int));
Xstatic void FDECL(forget,(BOOLEAN_P));
X
X#endif /* OVLB */
X
XSTATIC_DCL void FDECL(show_map_spot,(int,int));
X
X#ifdef OVLB
X
Xint
Xdoread() {
X	register struct obj *scroll;
X	register boolean confused = (Confusion != 0);
X
X	known = FALSE;
X	scroll = getobj(readable, "read");	/* "#-" added by GAN 10/22/86 */
X	if(!scroll) return(0);
X
X	/* below added to allow reading of fortune cookies */
X	if(scroll->otyp == FORTUNE_COOKIE) {
X	    if(flags.verbose)
X		You("break up the cookie and throw away the pieces.");
X	    outrumor(bcsign(scroll), TRUE);
X	    useup(scroll);
X	    return(1);
X	} else
X		if(scroll->olet != SCROLL_SYM
X#ifdef SPELLS
X		   && scroll->olet != SPBOOK_SYM
X#endif
X		  ) {
X			pline("That is a silly thing to read.");
X			return(0);
X		}
X
X	if(Blind)
X#ifdef SPELLS
X	    if (scroll->olet == SPBOOK_SYM) {
X		pline("Being blind, you cannot read the mystic runes.");
X		return(0);
X	    } else
X#endif
X	    if (!scroll->dknown) {
X		pline("Being blind, you cannot read the formula on the scroll.");
X		return(0);
X	    }
X#ifndef NO_SIGNAL
X	scroll->in_use = TRUE;		/* now being read */
X#endif
X#ifdef SPELLS
X	if(scroll->olet == SPBOOK_SYM) {
X	    if(confused) {
X		You("cannot grasp the meaning of this tome.");
X		useup(scroll);
X		return(0);
X	    } else
X		return(study_book(scroll));
X	}
X#endif
X	if(scroll->otyp != SCR_BLANK_PAPER) {
X	  if(Blind)
X	    pline("As you pronounce the formula on it, the scroll disappears.");
X	  else
X	    pline("As you read the scroll, it disappears.");
X	  if(confused) {
X	    if (Hallucination)
X		pline("Being so trippy, you screw up...");
X	    else
X		pline("Being confused, you mispronounce the magic words...");
X	  }
X	}
X	if(!seffects(scroll))  {
X		if(!objects[scroll->otyp].oc_name_known) {
X		    if(known && !confused) {
X			makeknown(scroll->otyp);
X			more_experienced(0,10);
X		    } else if(!objects[scroll->otyp].oc_uname)
X			docall(scroll);
X		}
X		if(!(scroll->otyp == SCR_BLANK_PAPER) || confused)
X			useup(scroll);
X#ifndef NO_SIGNAL
X		else scroll->in_use = FALSE;
X#endif
X	}
X	return(1);
X}
X
Xstatic void
Xstripspe(obj)
Xregister struct obj *obj;
X{
X	if (obj->blessed) pline(nothing_happens);
X	else {
X		if (obj->spe > 0) {
X		    obj->spe = 0;
X		    Your("%s vibrates briefly.",xname(obj));
X		} else pline(nothing_happens);
X	}
X}
X
Xstatic void
Xp_glow1(otmp)
Xregister struct obj	*otmp;
X{
X	Your("%s %s briefly.", xname(otmp),
X		Blind ? "vibrates" : "glows");
X}
X
Xstatic void
Xp_glow2(otmp,color)
Xregister struct obj	*otmp;
Xregister const char *color;
X{
X	Your("%s %s%s for a moment.",
X		xname(otmp),
X		Blind ? "vibrates" : "glows ",
X		Blind ? (const char *)"" : Hallucination ? hcolor() : color);
X}
X
X/*
X * recharge an object; curse_bless is -1 if the recharging implement
X * was cursed, +1 if blessed, 0 otherwise.
X */
Xstatic
Xvoid
Xrecharge(obj, curse_bless)
Xstruct obj *obj;
Xint curse_bless;
X{
X	register int n;
X	boolean is_cursed, is_blessed;
X
X	is_cursed = curse_bless < 0;
X	is_blessed = curse_bless > 0;
X
X	if (obj->olet != WAND_SYM) {
X	    switch(obj->otyp) {
X	    case MAGIC_MARKER:
X		if (is_cursed) stripspe(obj);
X		else if (obj->recharged) {
X		    if (obj->spe < 3)
X			Your("marker seems permanently dried out.");
X		    else
X			pline(nothing_happens);
X		}
X		else if (is_blessed) {
X		    n = obj->spe;
X		    if (n < 50) obj->spe = 50;
X		    if (n >= 50 && n < 75) obj->spe = 75;
X		    if (n >= 75) obj->spe += 10;
X		    p_glow2(obj,blue);
X		    obj->recharged = 1;
X		} else {
X		    if (obj->spe < 50) obj->spe = 50;
X		    else obj->spe++;
X		    p_glow2(obj,white);
X		    obj->recharged = 1;
X		}
X		break;
X	    case LAMP:
X		if (is_cursed) stripspe(obj);
X		else if (is_blessed) {
X		    n = rn2(11);
X		    if (obj->spe < n) obj->spe = n;
X		    else obj->spe += rnd(3);
X		    p_glow2(obj,blue);
X		} else {
X		    obj->spe++;
X		    p_glow1(obj);
X		}
X		break;
X	    case MAGIC_LAMP:
X		if (is_cursed) stripspe(obj);
X		else if (is_blessed > 0) {
X		    if (obj->spe == 1 || obj->recharged)
X			pline(nothing_happens);
X		    else {
X			obj->spe = 1;
X			obj->recharged = 1;
X			p_glow1(obj);
X		    }
X		} else {
X		    if (obj->spe == 1 || obj->recharged)
X			pline(nothing_happens);
X		    else {
X			n = rn2(2);
X			if (!n) {
X			    obj->spe = 1;
X			    obj->recharged = 1;
X			    p_glow1(obj);
X			} else pline(nothing_happens);
X		    }
X		}
X		break;
X	    case CRYSTAL_BALL:
X		if (is_cursed) stripspe(obj);
X		else if (is_blessed) {
X		    obj->spe = 6;
X		    p_glow2(obj,blue);
X		} else {
X		    if (obj->spe < 5) {
X			obj->spe++;
X			p_glow1(obj);
X		    } else pline(nothing_happens);
X		}
X		break;
X	    case BAG_OF_TRICKS:
X		if (is_cursed) stripspe(obj);
X		else if (is_blessed) {
X		    if (obj->spe <= 10)
X			obj->spe += (5 + rnd(10));
X		    else obj->spe += (5 + rnd(5));
X		    p_glow2(obj,blue);
X		} else {
X		    obj->spe += rnd(5);
X		    p_glow1(obj);
X		}
X		break;
X	    default:
X		You("have a feeling of loss.");
X		return;
X	    } /* switch */
X	}
X	else {
X	    if (obj->otyp == WAN_WISHING) {
X		if (obj->recharged) { /* recharged once already? */
X		    explode(obj);
X		    return;
X		}
X		if (is_cursed) stripspe(obj);
X		else if (is_blessed) {
X		    if (obj->spe != 3) {
X			obj->spe = 3;
X			p_glow2(obj,blue);
X		    } else {
X			explode(obj);
X			return;
X		    }
X		} else {
X		    if (obj->spe < 3) {
X			obj->spe++;
X			p_glow2(obj,blue);
X		    } else pline(nothing_happens);
X		}
X		obj->recharged = 1; /* another recharging disallowed */
X	    }
X	    else {
X		if (is_cursed) stripspe(obj);
X		else if (is_blessed) {
X		    if (objects[obj->otyp].bits & NODIR) {
X			n = rn1(5,11);
X			if (obj->spe < n) obj->spe = n;
X			else obj->spe++;
X		    }
X		    else {
X			n = rn1(5,4);
X			if (obj->spe < n) obj->spe = n;
X			else obj->spe++;
X		    }
X		    p_glow2(obj,blue);
X		} else {
X		    obj->spe++;
X		    p_glow1(obj);
X		}
X	    }
X	}
X}
X
X/*
X * forget some things (e.g. after reading a scroll of amnesia). abs(howmuch)
X * controls the level of forgetfulness; 0 == part of the map, 1 == all of
X * of map,  2 == part of map + spells, 3 == all of map + spells.
X */
X
Xstatic
Xvoid
Xforget(howmuch)
Xboolean howmuch;
X{
X	register int zx, zy;
X
X	known = TRUE;
X	for(zx = 0; zx < COLNO; zx++) for(zy = 0; zy < ROWNO; zy++)
X	    if(howmuch & 1 || rn2(7))
X		if(!cansee(zx,zy))
X		    levl[zx][zy].seen = levl[zx][zy].new =
X			levl[zx][zy].scrsym = 0;
X	docrt();
X#ifdef SPELLS
X	if(howmuch & 2) losespells();
X#endif
X}
X
Xint
Xseffects(sobj)
Xregister struct obj	*sobj;
X{
X	register int cval = 0;
X	register boolean confused = (Confusion != 0);
X	register struct obj *otmp;
X
X	switch(sobj->otyp) {
X#ifdef MAIL
X	case SCR_MAIL:
X		known = TRUE;
X		if (sobj->spe)
X		    pline("This seems to be junk mail addressed to the finder of the Eye of Larn.");
X		/* note to the puzzled: the game Larn actually sends you junk
X		 * mail if you win!
X		 */
X		else readmail(/* scroll */);
X		break;
X#endif
X	case SCR_ENCHANT_ARMOR:
X	    {
X		register schar s = 0;
X		otmp = some_armor();
X		if(!otmp) {
X			strange_feeling(sobj,
X					!Blind ? "Your skin glows then fades." :
X					"Your skin feels warm for a moment.");
X			return(1);
X		}
X		if(confused) {
X			if(Blind)
X			    Your("%s feels warm for a moment.",
X				xname(otmp));
X			else
X			    Your("%s is covered by a %s %s %s!",
X				xname(otmp),
X				sobj->cursed ? "mottled" : "shimmering",
X				Hallucination ? hcolor() :
X				  sobj->cursed ? black : (const char *)"gold",
X				sobj->cursed ? "glow" :
X				  (is_shield(otmp) ? "layer" : "shield"));
X			if(!(sobj->cursed))
X				otmp->rustfree = TRUE;
X			break;
X		}
X#ifdef TOLKIEN
X		if((otmp->spe > ((otmp->otyp == ELVEN_MITHRIL_COAT) ? 5 : 3))
X#else
X		if((otmp->spe > 3)
X#endif
X				&& rn2(otmp->spe) && !sobj->cursed) {
X		Your("%s violently %s%s for a while, then evaporates.",
X			    xname(otmp),
X			    Blind ? "vibrates" : "glows ",
X			    Blind ? nul : Hallucination ? hcolor() : silver);
X			if(is_cloak(otmp)) (void) Cloak_off();
X			if(is_boots(otmp)) (void) Boots_off();
X			if(is_helmet(otmp)) (void) Helmet_off();
X			if(is_gloves(otmp)) (void) Gloves_off();
X			if(is_shield(otmp)) (void) Shield_off();
X			if(otmp == uarm) (void) Armor_gone();
X			useup(otmp);
X			break;
X		}
X		s = sobj->blessed ? rnd(3) : sobj->cursed ? -1 : 1;
X		Your("%s %s%s for a %s.",
X			xname(otmp),
X			Blind ? "vibrates" : "glows ",
X			Blind ? nul : Hallucination ? hcolor() :
X			  sobj->cursed ? black : silver,
X			  (s*s>1) ? "while" : "moment");
X		otmp->cursed = sobj->cursed;
X		if (!otmp->blessed || sobj->cursed)
X			otmp->blessed = sobj->blessed;
X		otmp->spe += s;
X		adj_abon(otmp, s);
X		break;
X	    }
X	case SCR_DESTROY_ARMOR:
X	    {
X		otmp = some_armor();
X		if(confused) {
X			if(!otmp) {
X				strange_feeling(sobj,"Your bones itch.");
X				return(1);
X			}
X			otmp->rustfree = sobj->cursed;
X			p_glow2(otmp,purple);
X			break;
X		}
X		if(!sobj->cursed || (sobj->cursed && (!otmp || !otmp->cursed))) {
X		    if(!destroy_arm(otmp)) {
X			strange_feeling(sobj,"Your skin itches.");
X			return(1);
X		    }
X		} else {	/* armor and scroll both cursed */
X		    Your("%s vibrates.", xname(otmp));
X		    otmp->spe--;
X		    make_stunned(HStun + rn1(10, 10), TRUE);
X		}
X	    }
X	    break;
X	case SCR_CONFUSE_MONSTER:
X#ifdef SPELLS
X	case SPE_CONFUSE_MONSTER:
X#endif
X		if(u.usym != S_HUMAN || sobj->cursed) {
X			if(!HConfusion) You("feel confused.");
X			make_confused(HConfusion + rnd(100),FALSE);
X		} else  if(confused) {
X		    if(!sobj->blessed) {
X			Your("%s begin to %s%s.",
X			    makeplural(body_part(HAND)),
X			    Blind ? "tingle" : "glow ",
X			    Blind ? nul : Hallucination ? hcolor() : purple);
X			make_confused(HConfusion + rnd(100),FALSE);
X		    } else {
X			pline("A %s%s surrounds your %s.",
X			    Blind ? nul : Hallucination ? hcolor() : red,
X			    Blind ? "faint buzz" : " glow",
X			    body_part(HEAD));
X			make_confused(0L,TRUE);
X		    }
X		} else {
X		    if (!sobj->blessed) {
X			Your("%s%s %s%s.",
X			makeplural(body_part(HAND)),
X			Blind ? "" : " begin to glow",
X			Blind ? (const char *)"tingle" : Hallucination ? hcolor() : red,
X			u.umconf ? " even more" : "");
X			u.umconf++;
X		    } else {
X			if (Blind)
X			    Your("%s tingle %s sharply.",
X				makeplural(body_part(HAND)),
X				u.umconf ? "even more" : "very");
X			else
X			    Your("%s glow a%s brilliant %s.",
X				makeplural(body_part(HAND)),
X				u.umconf ? "n even more" : "",
X				Hallucination ? hcolor() : red);
X			u.umconf += (1 + rnd(8));
X		    }
X		}
X		break;
X	case SCR_SCARE_MONSTER:
X#ifdef SPELLS
X	case SPE_CAUSE_FEAR:
X#endif
X	    {	register int ct = 0;
X		register struct monst *mtmp;
X
X		for(mtmp = fmon; mtmp; mtmp = mtmp->nmon)
X		    if(cansee(mtmp->mx,mtmp->my)) {
X			if(confused || sobj->cursed) {
X			    mtmp->mflee = mtmp->mfrozen = mtmp->msleep = 0;
X			    mtmp->mcanmove = 1;
X			} else
X			    if (! resist(mtmp, sobj->olet, 0, NOTELL))
X				mtmp->mflee = 1;
X			if(!mtmp->mtame) ct++;	/* pets don't laugh at you */
X		    }
X		if(!ct)
X		      You("hear %s in the distance.",
X			       (confused || sobj->cursed) ? "sad wailing" :
X							"maniacal laughter");
X		else
X#ifdef SPELLS
X		     if(sobj->otyp == SCR_SCARE_MONSTER)
X#endif
X			    You("hear %s close by.",
X				  (confused || sobj->cursed) ? "sad wailing" :
X						 "maniacal laughter");
X		break;
X	    }
X	case SCR_BLANK_PAPER:
X		if(confused)
X		    You("try to read the strange patterns on this scroll, but it disappears.");
X		else  {
X		    pline("This scroll seems to be blank.");
X		    known = TRUE;
X		}
X		break;
X	case SCR_REMOVE_CURSE:
X#ifdef SPELLS
X	case SPE_REMOVE_CURSE:
X#endif
X	    {	register struct obj *obj;
X		if(confused)
X		    if (Hallucination)
X			You("feel the power of the Force against you!");
X		    else
X			You("feel like you need some help.");
X		else
X		    if (Hallucination)
X			You("feel in touch with the Universal Oneness.");
X		    else
X			You("feel like someone is helping you.");
X
X		if(sobj->cursed) pline("The scroll disintegrates.");
X		else {
X		    for(obj = invent; obj ; obj = obj->nobj)
X			if(sobj->blessed || obj->owornmask ||
X			   (obj->otyp == LOADSTONE)) {
X			    if(confused) blessorcurse(obj, 2);
X			    else obj->cursed = 0;
X			}
X		}
X		if(Punished && !confused) unpunish();
X		break;
X	    }
X	case SCR_CREATE_MONSTER:
X#if defined(WIZARD) || defined(EXPLORE_MODE)
X	    if (wizard || discover)
X		known = TRUE;
X#endif /* WIZARD || EXPLORE_MODE */
X#ifdef SPELLS
X	case SPE_CREATE_MONSTER:
X#endif
X	    {	register int cnt = 1;
X
X		if(!rn2(73)) cnt += rnd(4);
X		if(confused || sobj->cursed) cnt += 12;
X		while(cnt--) {
X#if defined(WIZARD) || defined(EXPLORE_MODE)
X		    if((!wizard && !discover) || !create_particular())
X#endif /* WIZARD || EXPLORE_MODE */
X		    (void) makemon (confused ? &mons[PM_ACID_BLOB] :
X					(struct permonst *) 0, u.ux, u.uy);
X		}
X		break;
X	    }
X/*	    break;	/*NOTREACHED*/
X	case SCR_ENCHANT_WEAPON:
X		if(uwep && (uwep->olet == WEAPON_SYM || uwep->otyp == PICK_AXE
X			|| uwep->otyp == UNICORN_HORN) && confused) {
X		/* olet check added 10/25/86 GAN */
X                        uwep->rustfree = !(sobj->cursed);
X			if(Blind)
X			    Your("weapon feels warm for a moment.");
X			else
X			    Your("%s covered by a %s %s %s!",
X				aobjnam(uwep, "are"),
X				sobj->cursed ? "mottled" : "shimmering",
X				Hallucination ? hcolor() :
X				  sobj->cursed ? purple : (const char *)"gold",
X				sobj->cursed ? "glow" : "shield");
X		} else return !chwepon(sobj, bcsign(sobj)*2+1);
X		break;
X	case SCR_TAMING:
X#ifdef SPELLS
X	case SPE_CHARM_MONSTER:
X#endif
X	    {	register int i,j;
X		register int bd = confused ? 5 : 1;
X		register struct monst *mtmp;
X
X		for(i = -bd; i <= bd; i++) for(j = -bd; j <= bd; j++)
X		if(isok(u.ux+i, u.uy+j) && (mtmp = m_at(u.ux+i, u.uy+j))) {
X		    if(sobj->cursed) {
X			if(!mtmp->mtame) mtmp->mpeaceful = 0;
X		    } else {
X			if (mtmp->isshk) {
X			    if (!mtmp->mpeaceful) {
X				kludge("%s calms down.", Monnam(mtmp));
X				mtmp->mpeaceful = 1;
X			    }
X			} else if(!resist(mtmp, sobj->olet, 0, NOTELL))
X			    (void) tamedog(mtmp, (struct obj *) 0);
X		    }
X		}
X		break;
X	    }
X	case SCR_GENOCIDE:
X		You("have found a scroll of genocide!");
X#ifdef SPELLS
X	case SPE_GENOCIDE:
X#endif
X		known = TRUE;
X		if (sobj->blessed) do_class_genocide();
X		else do_genocide(!sobj->cursed | (2 * !!Confusion));
X		break;
X	case SCR_LIGHT:
X		if(!Blind) known = TRUE;
X		litroom(!confused && !sobj->cursed);
X		break;
X	case SCR_TELEPORTATION:
X		if(confused || sobj->cursed) level_tele();
X		else {
X			register int uroom = inroom(u.ux, u.uy);
X
X			if (sobj->blessed && !Teleport_control) {
X				known = TRUE;
X#ifndef MACOS
X				pline("Do you wish to teleport? ");
X				if (yn()=='n') break;
X#else
X				if(!flags.silent) SysBeep(1);
X				if(UseMacAlertText(128, "Do you wish to teleport ?") == 2)
X					break;
X#endif
X			}
X			tele();
X			if(uroom != inroom(u.ux, u.uy)) known = TRUE;
X			if(Teleport_control) known = TRUE;
X		}
X		break;
X	case SCR_GOLD_DETECTION:
X		if (confused || sobj->cursed) return(trap_detect(sobj));
X		else return(gold_detect(sobj));
X	case SCR_FOOD_DETECTION:
X#ifdef SPELLS
X	case SPE_DETECT_FOOD:
X#endif
X		if (food_detect(sobj))
X			return(1);	/* nothing detected */
X		break;
X#ifdef SPELLS
X	case SPE_IDENTIFY:
X		cval = rn2(5);
X		goto id;
X#endif
X	case SCR_IDENTIFY:
X		/* known = TRUE; */
X		if(confused)
X			You("identify this as an identify scroll.");
X		else
X			pline("This is an identify scroll.");
X		if (sobj->blessed || (!sobj->cursed && !rn2(5)))
X			cval = rn2(5);
X			/* Note: if rn2(5)==0, identify all items */
X		else	cval = 1;
X		useup(sobj);
X		makeknown(SCR_IDENTIFY);
X#ifdef SPELLS
X	id:
X#endif
X		if(!confused)
X		    while(invent && !ggetobj("identify", identify, cval));
X		return(1);
X	case SCR_CHARGING:
X		if (confused) {
X		    You("feel charged up!");
X#ifdef SPELLS
X		    if (u.uen < u.uenmax)
X			u.uen = u.uenmax;
X		    else
X			u.uen = u.uenmax + d(5,4);
X		    flags.botl = 1;
X#endif
X		    break;
X		}
X		known = TRUE;
X		pline("This is a charging scroll.");
X		otmp = getobj("0#", "charge");
X		if (!otmp) break;
X		recharge(otmp, sobj->cursed ? -1 : (sobj->blessed ? 1 : 0));
X		break;
X	case SCR_MAGIC_MAPPING:
X		known = TRUE;
X		pline("On this scroll %s a map.", confused ? "was" : "is");
X#ifdef SPELLS
X	case SPE_MAGIC_MAPPING:
X#endif
X		cval = (sobj->cursed && !confused);
X		if(cval) HConfusion = 1;	/* to screw up map */
X		do_mapping();
X		if(cval) {
X		    HConfusion = 0;		/* restore */
X		    pline("Unfortunately, it is of a very poor quality.");
X		}
X		break;
X	case SCR_AMNESIA:
X		known = TRUE;
X		forget( ((!sobj->blessed) << 1) | (!confused || sobj->cursed) );
X		if (Hallucination) /* Ommmmmm! */
X			Your("mind releases itself from mundane concerns.");
X		else if (!strncmp(plname, "Maud", 4))
X			pline("As your mind turns inward on itself, you forget everything else.");
X		else if (rn2(2))
X			pline("Who was that Maud person anyway?");
X		else
X			pline("Thinking of Maud you forget everything else.");
X		break;
X	case SCR_FIRE:
X	    {	register int num;
X		register struct monst *mtmp;
X/*
X * Note: Modifications have been made as of 3.0 to allow for some damage
X *	 under all potential cases.
X */
X		cval = bcsign(sobj);
X		useup(sobj);
X		makeknown(SCR_FIRE);
X		if(confused) {
X		    if(Fire_resistance) {
X  			shieldeff(u.ux, u.uy);
X			if(!Blind)
X			    pline("Oh, look, what a pretty fire in your %s.",
X				makeplural(body_part(HAND)));
X			else You("feal a pleasant warmth in your %s.",
X				makeplural(body_part(HAND)));
X		    } else {
X			pline("The scroll catches fire and you burn your %s.",
X				makeplural(body_part(HAND)));
X			losehp(1, "scroll of fire", KILLED_BY_AN);
X		    }
X		    return(1);
X		}
X		pline("The scroll erupts in a tower of flame!");
X		num = rnd(6) - 3 * cval;
X		if(num <= 0 || Fire_resistance) {
X			shieldeff(u.ux, u.uy);
X			You("are uninjured.");
X		} else {
X			u.uhpmax -= num;
X			losehp(num, "scroll of fire", KILLED_BY_AN);
X		}
X		destroy_item(SCROLL_SYM, AD_FIRE);
X#ifdef SPELLS
X		destroy_item(SPBOOK_SYM, AD_FIRE);
X#endif
X		destroy_item(POTION_SYM, AD_FIRE);
X
X		num = (2*(rn1(3, 3) + 2 * cval) + 1)/3;
X		for(mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
X		    if(dist(mtmp->mx,mtmp->my) < 3) {
X			if (resists_fire(mtmp->data)) continue;
X			if (u.uswallow) {
X				if (mtmp != u.ustuck) continue;
X				if (is_animal(u.ustuck->data))
X					pline("%s gets heartburn.", 
X					      Monnam(u.ustuck));
X				else
X					You("toast %s slightly.", 
X					    Monnam(u.ustuck)); 
X				num *= 2;
X			}
X			mtmp->mhp -= num;		/* No saving throw! */
X			if(resists_cold(mtmp->data))
X			    mtmp->mhp -= 3*num;
X			if(mtmp->mhp < 1) {
X			    killed(mtmp);
X			    break;		/* primitive */
X			}
X		    }
X		}
X		return(1);
X	    }
X	case SCR_PUNISHMENT:
X		known = TRUE;
X		if(confused || sobj->blessed) {
X			You("feel guilty.");
X			break;
X		}
X		punish(sobj);
X		break;
X	default:
X		impossible("What weird effect is this? (%u)", sobj->otyp);
X	}
X	return(0);
X}
X
Xstatic void
Xexplode(obj)
Xregister struct obj *obj;
X{
X    Your("%s vibrates violently, and explodes!",xname(obj));
X    bell();
X    losehp(rn2(2*(u.uhpmax+1)/3),"exploding wand", KILLED_BY_AN);
X    useup(obj);
X}
X
Xvoid
Xlitroom(on)
Xregister boolean on;
X{
X	register int zx,zy;
X
X	/* first produce the text (provided he is not blind) */
X	if(Blind) goto do_it;
X	if(!on) {
X		if(u.uswallow || is_maze_lev || levl[u.ux][u.uy].typ == CORR ||
X		    !levl[u.ux][u.uy].lit) {
X			pline("It seems even darker in here than before.");
X			return;
X		} else
X			pline("It suddenly becomes dark in here.");
X	} else {
X		if(u.uswallow){
X			if (is_animal(u.ustuck->data))
X				pline("%s's stomach is lit.", Monnam(u.ustuck));
X			else
X				if (is_whirly(u.ustuck->data))
X					pline("%s shines briefly.", 
X					      Monnam(u.ustuck));
X				else
X					pline("%s glistens.", Monnam(u.ustuck));
X			return;
X		}
X		if(is_maze_lev){
X			pline(nothing_happens);
X			return;
X		}
X		if(levl[u.ux][u.uy].typ == CORR) {
X		    pline("The corridor lights up around you, then fades.");
X		    return;
X		} else if(levl[u.ux][u.uy].lit) {
X		    pline("The light here seems better now.");
X		    return;
X		} else
X		    pline("The room is lit.");
X	}
X
Xdo_it:
X	if(levl[u.ux][u.uy].lit == on)
X		return;
X	if (inroom(u.ux,u.uy) < 0)
X		return;
X	getcorners(&seelx,&seehx,&seely,&seehy,&seelx2,&seehx2,&seely2,&seehy2);
X
X	for(zy = seely; zy <= seehy; zy++)
X		for(zx = seelx; zx <= seehx; zx++) {
X			levl[zx][zy].lit = on;
X			if(!Blind && dist(zx,zy) > 2)
X				if(on) prl(zx,zy); else nosee(zx,zy);
X		}
X	for(zy = seely2; zy <= seehy2; zy++)
X		for(zx = seelx2; zx <= seehx2; zx++) {
X			levl[zx][zy].lit = on;
X			if(!Blind && dist(zx,zy) > 2)
X				if(on) prl(zx,zy); else nosee(zx,zy);
X		}
X	if(!on) seehx = 0;
X}
X
Xstatic void
Xdo_class_genocide()
X{
X	register int i, j, immunecnt, gonecnt, goodcnt;
X	char buf[BUFSZ];
X
X	for(j=0; ; j++) {
X		if (j >= 5) {
X			pline(thats_enough_tries);
X			return;
X		}
X		do {
X    pline("What class of monsters do you wish to genocide? [type a letter] ");
X			getlin(buf);
X		} while (buf[0]=='\033' || strlen(buf) != 1);
X		immunecnt = gonecnt = goodcnt = 0;
X		for(i=0; mons[i].mlet; i++) {
X			if(mons[i].mlet == buf[0]) {
X				if (!(mons[i].geno & G_GENO)) immunecnt++;
X				else if(mons[i].geno & G_GENOD) gonecnt++;
X				else goodcnt++;
X			}
X		}
X		if (!goodcnt && buf[0] != S_HUMAN) {
X			if (gonecnt)
X	pline("All such monsters are already nonexistent.");
X			else if (immunecnt)
X	You("aren't permitted to genocide such monsters.");
X			else
X	pline("That symbol does not represent any monster.");
X			continue;
X		}
X		for(i=0; mons[i].mlet; i++) {
X		    if(mons[i].mlet == buf[0]) {
X			register struct monst *mtmp, *mtmp2;
X			char *n = makeplural(mons[i].mname);
X
X			if (&mons[i]==player_mon() || ((mons[i].geno & G_GENO)
X				&& !(mons[i].geno & G_GENOD))) {
X			/* This check must be first since player monsters might
X			 * have G_GENOD or !G_GENO.
X			 */
X			    pline("Wiped out all %s.", n);
X			    if (&mons[i] == player_mon()) {
X				u.uhp = -1;
X				killer_format = KILLED_BY_AN;
X				killer = "scroll of genocide";
X#ifdef POLYSELF
X				if (u.umonnum >= 0)
X				    You("feel dead inside.");
X				else
X#endif
X				    done(GENOCIDED);
X			    }
X			    /* for simplicity (and fairness) let's avoid
X			     * alignment changes here...
X			     */
X#ifdef POLYSELF
X			    if (i==u.umonnum) rehumanize();
X#endif
X			    mons[i].geno |= G_GENOD;
X			    for(mtmp = fmon; mtmp; mtmp = mtmp2) {
X				mtmp2 = mtmp->nmon;
X				if(mtmp->data == &mons[i])
X				    mondead(mtmp);
X			    }
X			} else if ((mons[i].geno & G_GENOD) &&
X			  !(mons[i].geno & G_UNIQ))
X			    pline("All %s are already nonexistent.", n);
X			else
X			    You("aren't permitted to genocide %s%s.",
X				i == PM_WIZARD_OF_YENDOR ? "the " : "",
X				type_is_pname(&mons[i]) ? mons[i].mname : n);
X			}
X		}
X		return;
X	}
X}
X		
X#define REALLY 1
X#define PLAYER 2
Xvoid
Xdo_genocide(how)
Xint how;
X/* 0 = no genocide; create monsters (cursed scroll) */
X/* 1 = normal genocide */
X/* 3 = forced genocide of player */
X{
X	char buf[BUFSZ];
X	register int	i, j, killplayer = 0;
X	register struct permonst *ptr;
X	register struct monst *mtmp, *mtmp2;
X
X	if (how & PLAYER) {
X		ptr = player_mon();
X		Strcpy(buf, ptr->mname);
X		killplayer++;
X	} else {
X	    for(j = 0; ; j++) {
X		if(j >= 5) {
X		    pline(thats_enough_tries);
X		    return;
X		}
X		pline("What monster do you want to genocide? [type the name] ");
X		getlin(buf);
X
X		if(strlen(buf) && (!strncmp(buf, pl_character, PL_CSIZ))) {
X	/* Note: pl_character starts with capitals and player_mon does not */
X		    ptr = player_mon();
X		    killplayer++;
X		    goto deadmeat;
X		} else {
X		    i = name_to_mon(buf);
X		    if(i == -1 || (mons[i].geno & G_GENOD)) {
X			pline("Such creatures do not exist in this world.");
X			continue;
X		    }
X		    ptr = &mons[i];
X		    if (ptr == player_mon()) {
X			killplayer++;
X			goto deadmeat;
X		    }
X		    if (is_human(ptr)) adjalign(-sgn(u.ualigntyp));
X		    if (is_demon(ptr)) adjalign(sgn(u.ualigntyp));
X
X		    if(!(ptr->geno & G_GENO))  {
X			if(flags.soundok) {
X			    if(flags.verbose)
X			pline("A thunderous voice booms though the caverns:");
X			    pline("\"No, mortal!  That will not be done.\"");
X			}
X			continue;
X		    }
X		    break;
X		}
X	    }
X	}
Xdeadmeat:
X	if (Hallucination) {
X#ifdef POLYSELF
X	    if (u.umonnum != -1)
X		Strcpy(buf,uasmon->mname);
X	    else
X#endif
X	    {
X		Strcpy(buf, pl_character);
X		buf[0] += 'a' - 'A';
X	    }
X	} else Strcpy(buf,ptr->mname); /* make sure we have standard singular */
X	if (how & REALLY) {
X	    pline("Wiped out all %s.", makeplural(buf));
X	    if(killplayer) {
X		u.uhp = -1;
X		killer_format = KILLED_BY_AN;
X		killer = "genocide spell";
X#ifdef POLYSELF
X	/* A polymorphed character will die as soon as he is rehumanized. */
X		if(u.umonnum >= 0)	You("feel dead inside.");
X		else
X#endif
X			done(GENOCIDED);
X		return;
X	    }
X#ifdef POLYSELF
X	    else if (ptr == uasmon) rehumanize();
X#endif
X	    ptr->geno |= G_GENOD;
X	    for(mtmp = fmon; mtmp; mtmp = mtmp2) {
X		mtmp2 = mtmp->nmon;
X		if(mtmp->data == ptr)
X		    mondead(mtmp);
X	    }
X	} else {
X	    pline("Sent in some %s.", makeplural(buf));
X	    j = rnd(3) + 3;
X	    for(i=1; i<=j; i++) {
X		struct monst *mmon = makemon(ptr, u.ux, u.uy);
X		struct obj *otmp;
X
X		while(otmp = (mmon->minvent)) {
X			mmon->minvent = otmp->nobj;
X			free((genericptr_t)otmp);
X		}
X	    }
X	}
X}
X
X#endif /* OVLB */
X#ifdef OVL0
X
XSTATIC_OVL void
Xshow_map_spot(x, y)
Xregister int x, y;
X{
X	register struct rm *lev;
X	register int num;
X
X	if((Confusion != 0) && rn2(7)) return;
X	lev = &(levl[x][y]);
X	if((num = lev->typ) == 0) return;
X
X	if(num == SCORR) {
X		lev->typ = CORR;
X		lev->scrsym = CORR_SYM;
X	/*
X	 * magic mapping shouldn't find secret doors,
X	 * especially on the stronghold level
X	 */
X	} else if(lev->seen) return;
X	if(num != ROOM)
X	{
X		lev->seen = lev->new = 1;
X		if(lev->scrsym == STONE_SYM || !lev->scrsym)
X			newsym(x, y);
X		else	on_scr(x, y);
X	}
X}
X
Xvoid
Xdo_mapping() {
X	register int zx, zy;
X
X	for(zy = 0; zy < ROWNO; zy++)
X	    for(zx = 0; zx < COLNO; zx++)
X		show_map_spot(zx, zy);
X}
X
X#endif /* OVL0 */
X#ifdef OVLB
X
Xvoid
Xdo_vicinity_map() {
X	register int zx, zy;
X	
X	for(zy = (u.uy-5 < 0 ? 0 : u.uy-5); 
X			zy < (u.uy+6 > ROWNO ? ROWNO : u.uy+6); zy++)
X	    for(zx = (u.ux-9 < 0 ? 0 : u.ux-9); 
X			zx < (u.ux+10 > COLNO ? COLNO : u.ux+10); zx++)
X		show_map_spot(zx, zy);
X}
X
Xint
Xgold_detect(sobj)
Xregister struct obj	*sobj;
X{
X	register struct gold *gtmp;
X
X	if(!fgold) {
X		if(sobj)
X		    strange_feeling(sobj, "You feel materially poor.");
X		return(1);
X	} else {
X		known = TRUE;
X		for(gtmp = fgold; gtmp; gtmp = gtmp->ngold)
X			if(gtmp->gx != u.ux || gtmp->gy != u.uy)
X				goto outgoldmap;
X		/* only under me - no separate display required */
X		You("notice some gold between your %s.",
X			makeplural(body_part(FOOT)));
X		return(0);
X	outgoldmap:
X		cls();
X		for(gtmp = fgold; gtmp; gtmp = gtmp->ngold)
X		    at( gtmp->gx, gtmp->gy,
X			(uchar)(Hallucination ? rndobjsym() : GOLD_SYM),
X			AT_OBJ);
X		prme();
X		You("feel very greedy, and sense gold!");
X		more();
X		docrt();
X	}
X	return(0);
X}
X
X/* food_detection is pulled out so that it 	*/
X/* can also be used in the crystal ball routine	*/
X/* returns 1 if nothing was detected		*/
X/* returns 0 if something was detected		*/
Xint
Xfood_detect(sobj)
Xregister struct obj	*sobj;
X{
X	register boolean confused = (Confusion || (sobj && sobj->cursed));
X	register int ct = 0, ctu = 0;
X	register struct obj *obj;
X	register char foodsym = confused ? POTION_SYM : FOOD_SYM;
X
X	for(obj = fobj; obj; obj = obj->nobj)
X		if(obj->olet == foodsym) {
X			if(obj->ox == u.ux && obj->oy == u.uy) ctu++;
X			else ct++;
X		}
X	if(!ct && !ctu) {
X		if (sobj) strange_feeling(sobj,"Your nose twitches.");
X		return(1);
X	} else if(!ct) {
X		known = TRUE;
X		You("%s %s nearby.", sobj ? "smell" : "sense",
X			confused ? "something" : "food");
X	} else {
X		known = TRUE;
X		cls();
X		for(obj = fobj; obj; obj = obj->nobj)
X		    if(obj->olet == foodsym)
X			at(obj->ox, obj->oy,
X			   (uchar)(Hallucination ? rndobjsym() : FOOD_SYM),
X			   AT_OBJ);
X		prme();
X		if (sobj) Your("nose tingles and you smell %s.",
X				confused ? "something" : "food");
X		else You("sense %s.", confused ? "something" : "food");
X		more();
X		docrt();
X	}
X	return(0);
X}
X
Xvoid
Xpunish(sobj)
Xregister struct obj	*sobj;
X{
X	You("are being punished for your misbehavior!");
X	if(Punished){
X		Your("iron ball gets heavier.");
X		uball->owt += 15 * (1 + sobj->cursed);
X		return;
X	}
X	setworn(mkobj_at(CHAIN_SYM, u.ux, u.uy, TRUE), W_CHAIN);
X	setworn(mkobj_at(BALL_SYM, u.ux, u.uy, TRUE), W_BALL);
X	uball->spe = 1;		/* special ball (see save) */
X}
X
Xvoid
Xunpunish()
X{	    /* remove the ball and chain */
X	freeobj(uchain);
X	unpobj(uchain);
X	free((genericptr_t) uchain);
X	setworn((struct obj *)0, W_CHAIN);
X	uball->spe = 0;
X	setworn((struct obj *)0, W_BALL);
X}
X
X/* some creatures have special data structures that only make sense in their
X * normal locations -- if the player tries to create one elsewhere, or to revive
X * one, the disoriented creature becomes a zombie
X */
Xboolean
Xcant_create(mtype)
Xint *mtype;
X{
X
X	if (*mtype==PM_GUARD || *mtype==PM_SHOPKEEPER
X#if defined(ALTARS) && defined(THEOLOGY)
X	     || *mtype==PM_TEMPLE_PRIEST || *mtype==PM_TEMPLE_PRIESTESS
X#endif
X								) {
X		*mtype = PM_HUMAN_ZOMBIE;
X		return TRUE;
X	} else
X		return FALSE;
X}
X
X#if defined(WIZARD) || defined(EXPLORE_MODE)
Xboolean
Xcreate_particular()
X{
X	char buf[BUFSZ];
X	int which, tries = 0;
X
X	do {
X	    pline("Create what kind of monster? [type the name] ");
X	    getlin(buf);
X	    which = name_to_mon(buf);
X	    if (which < 0) pline("I've never heard of such monsters.");
X	    else break;
X	} while (++tries < 5);
X	if (tries == 5) pline(thats_enough_tries);
X	else {
X	    if (!(mons[which].geno & G_GENOD) && cant_create(&which) &&
X								!Blind) {
X		if (mons[which].geno & G_GENOD)
Xpline("An image of the creature forms, wavers momentarily, then fades.");
X		else
Xpline("The disoriented creature's eyes slowly glaze over.");
X	    }
X	    (void) makemon(&mons[which], u.ux, u.uy);
X	    return TRUE;
X	}
X	return FALSE;
X}
X#endif /* WIZARD || EXPLORE_MODE */
X
X#endif /* OVLB */
END_OF_FILE
if test 30153 -ne `wc -c <'src/read.c'`; then
    echo shar: \"'src/read.c'\" unpacked with wrong size!
fi
# end of 'src/read.c'
fi
echo shar: End of archive 29 \(of 56\).
cp /dev/null ark29isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 56 archives.
    rm -f ark[1-9]isdone ark[1-9][0-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0