home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-07-23 | 60.1 KB | 1,570 lines |
- Path: uunet!news.tek.com!saab!billr
- From: billr@saab.CNA.TEK.COM (Bill Randle)
- Newsgroups: comp.sources.games
- Subject: v18i050: nethack31 - display oriented dungeons & dragons (Ver. 3.1), Patch3q/18
- Date: 20 Jul 1993 22:33:43 GMT
- Organization: Tektronix, Inc, Redmond, OR, USA
- Lines: 1557
- Approved: billr@saab.CNA.TEK.COM
- Message-ID: <22hrs7$9qd@ying.cna.tek.com>
- NNTP-Posting-Host: saab.cna.tek.com
- Xref: uunet comp.sources.games:1850
-
- Submitted-by: izchak@linc.cis.upenn.edu (Izchak Miller)
- Posting-number: Volume 18, Issue 50
- Archive-name: nethack31/patch3q
- Patch-To: nethack31: Volume 16, Issue 1-116
- Environment: Amiga, Atari, Mac, MS-DOS, Windows-NT, OS2, Unix, VMS, X11
-
-
-
- #! /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 17 (of 18)."
- # Contents: sys/mac/NHrsrc.hqx sys/unix/snd86unx.shr
- # Wrapped by billr@saab on Tue Jul 20 14:57:23 1993
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f 'sys/mac/NHrsrc.hqx' -a "${1}" != "-c" ; then
- echo shar: Renaming existing file \"'sys/mac/NHrsrc.hqx'\" to \"'sys/mac/NHrsrc.hqx.orig'\"
- mv -f 'sys/mac/NHrsrc.hqx' 'sys/mac/NHrsrc.hqx.orig'
- fi
- echo shar: Extracting \"'sys/mac/NHrsrc.hqx'\" \(28405 characters\)
- sed "s/^X//" >'sys/mac/NHrsrc.hqx' <<'END_OF_FILE'
- X(This file must be converted with BinHex 4.0)
- X
- X:$%jPG%KKBfXZFR0bB`"bFh*M8P0&4!#3#&kSiX`!N!3"!*!$9[d!!&Ap!!!(U`#
- X3"!d!%!!Y!$#J!J#S!*!&&J!i!#F!iBJB8h4[$%jPG%KKBfXZFR0bBcN#!*!$FR0
- XbBe*6483"!2q3"!!!FR0bBe*6483"!2q3"!#3%UKHkei!N!CHU!!!b!%`!!%!N!J
- X,Z3#3""8!N!AQ!9`!!3#3#!Zi!*!%&3"3!'i!qJ'i!!%!N!J(e!#3""8!8!"Z!2S
- X"Z!!"!*!)"p-!N!39!&!!EJ$k!EJ!!3#3#!I5!*!%&3"3!'i!qJ'i!*!$(!%)!!J
- X"5J$`!*!+"dePFh0KCf8i#J#3!a`",J!%!9)"bJ#3#JC6G'&dGA0V1!S!N!-@!(`
- X!fJ$i!BS!N!3"!*!'66J+!*!$'J#q!!B"8!%b!*!%!3#3"34*EQC[)$J+!*!$)J!
- XS!#J!M!#L!*!%!3#3"3e1G@aX)>EQ4[Gb!K1!S!N!-m$NjeE@*PFL"[CL"VCAP
- Xc6d019!8UN!9-8e4$"dYPH@0[C'9)3PP8"%0SBA*$5%&5"5U3"8a69%8!N!-J!#J
- X!+!&+!Hi!N!S,4(9ZCf9[EL"0BA!i#J#3!b!!+!!S!+`"c!#3"!%!N!8,4'PKCfj
- X[Fh4TBh-i#J#3!aB!!400B@-J6Q9d5'&MDb")C@a`b5mr!*!$J!#3#`rr!*!%r`$
- Xa!I!!N!2lm!m3(`#3!`qr$`%"m!#3!r[r%"$`!!$`$lrrmI!!$`rrqr!2!!!2%"$
- Xr[`#3!`m"!I$lm!#3!r!3m!qr!*!$$`%2!2[`!*!$rr!!$lm!N!Ilm!#3"Jqr!*!
- X(r`#3!i!2rj!&!!!2$*!%$r!!$m#3"-r2!!m-$!rr$rr`$mr`ca$``2!2$lm2!3m
- X-m!r!qrm3(m$`$``2[rrr$2!2rrrlm-$!m!ra!Iqr$!c`$r!3m2[``2!2$`(m$lm
- X-m!r!rr$!qr$`$`b3"!qrm!r!N!Alm!rrN!E`!*!$3!!!!F!ci#R`&IJ,q#AiIT!
- X!Id"qS$j3(bJ1&!!+!!8!!`(!Fq"rm(ri2r`rr(rmrrMrm2r`IrJrr"mq$Km!$`!
- X(!*!$3(r`3"K!&%(H@H*9mN[b4I*qJRp#IU*H8NiU3"C!#RrqIr"rq(rmIrjrrRr
- XqIrjrrRrqIrjrrRrqIrjrrRrqIri!!!%!N!B2J!!!2q!!%$r`!"`Iq!!+(rJ!#4r
- Xm!!5Ir!!#Ir`!!6rm!!#Ir!!`cr`!IqBB!(rb!!"rq3!!Irb!!(rb3!"rm5!!2r#
- X3!!!rm%J!(rJN!!ri%J!$i!N!N!-%J!!!!N!!!!%J!*!$N!!!N!0)!*!$*!#3!a)
- X!N!-+!*!$"!!2J!!!2q!!%(r`!$arq!!q2r`!(crm!"qrrJ!2rri!"rrq!!2rrJ!
- Xarri!Irrq!2rrr!$rraJ!rrq!!2rr`!$rrq!!rr[`!(rjq!"rq2`!2raq!"rm2`!
- X2q"q!!q!2`!!!"q!!!!2`!!!"q!#3!r`!N!0q!*!$2`#3!am!N!-1!!!"!"rrrJ!
- X3!!-!%!!#J"!!!N!3!!)J%!!#%"!$iJJ3"r[i%BIm#"&$r!J4)ri)%*2q#""2rJJ
- X3*ri)%"2q#"-CM!JAr)!)&rj!#"Ir)!JAr*!!#"Im5!J6r#3)%ri5#"(q#3J3I!5
- X)%!!#5"!!!5J3!!#B%!!!5"!!!#J3!!!B(rrrq"rrrJ!Irrm!(rrrJ"rrrm!Irrr
- XJ(rrrm"rrrrJIrrri(rrrq"rrrrJIrrri(rrrq"rrrrJIrrri(rrrq"rrrrJIrrr
- Xi(rrrq"rrrrJIrrri(rrrq"rrrrJIrrri(rrrq"rrrrJIrrri(rrrq"rrrrJIrrr
- Xi(rrrq"rrrrJIrrri!!!#!*!Arrr`!*!-ra!3(r!!N!F2!*!$m3'3!`m!N!F2r`!
- X!$a#3"2!!N!Ilm!!2!C!%m!#3"rZr!!m3N!3I!*!($l[`$`'3"!m!N!Ml[rm3N!3
- XI!*!)$l[a!C!%$`#3#IZr%*!%(`#3"[m!!2qlmIrrm3m!N!82%2rr%2Zrm!!2m!#
- X3"3m"N!32Zr!!N!J2%*!&qlm!N!J2!C!&rl[`!*!($a#3""m!qlm!N!F2!C!%$`!
- X2Zr!!N!I`%*!$(`!!qlm!N!Ia!C!$$`!!$l[`!*!'$a#3"2!!!2Zr!*!(r`%"$r!
- X!!!qlm!#3"rrrm!#3"2Zr!*!1$l[`!*!1qlm!N!i2Zr!!N!ll[`#3$Jqlm!#3$[Z
- Xr!*!1$l[`!*!1qr!!N!i2!*!$!J!!$rq3#I!!N!82$*!*r`#3"3r!N!Rmm!#3"!m
- X-N!Rmc`#3"!r!N!Rmc2!!N!-2$*!*r-c2!*!$$m#3"Irrm-$mc-c`!!!2$*!%$`%
- X"$rcrN!2`!!!2`-r``-m3N!2r`*!$m!!!$``2[``-m3%"$`b3!r!!!!r!cl[``2!
- X3N!2``-$`!!!2$!cl[`ca!C!$r!`-m!!!$m$!cl[rm"#3!r$!`2!!!!m-N!2l[`'
- X3"2`-$2!!!!r!N!22Zr$rra$``-$`!!!2$2m-$rZrr!cr$*!$m!!!$mm3rrmIZr$
- X!N!A`!!!2$`'3"2Zr$*!&m!!!$mm3N!-Irl[``*!%m!!!$`m"N!-2$2Zr$*!%m!!
- X!$mm3N!-I`-qlm-#3!r!!!!m-m3%"$``-qlm-N!2`!!!2`2!3N!2``-qlm-$!m!!
- X!$``2m3%"r!`-qlm-$2!!!!r!`-rrrm#3!mqlm-$`!!!2$*!*qlm-m!!!$m#3#Fq
- Xlm2!!!!m-N!Vl[r!!!!r!N!V2Zr!!!!m-N![lm!!!$m#3#mr`!!!2rj!-m!#3"!`
- X!@J"Z!1i"NJ#"4%3!N!0-!!)!N!9i!-B!LJ%3"!*25`#3"3S!4J"c!4#)(%0[G@a
- XN)'j[G#"H-L"LC@0KGA0P)&i`,L!JAM%!N!8+!"3!+J!dS!)!N!3"!*!*2rrrm#!
- X!!"JJ"m!B)!r`'#-2q"JLKrJB)NIm'#%Rr"JJRr`B)%rm'#!Rr"JQ-aJB,rN!'#r
- XmJ"J[rN!B,rNJ'#riN!!B*rK)'#Im*"JMr")B)2J*'#!!"*JJ!!*B)!!"1#!!!*J
- XJ!!"B)!!!1$rrrrJIrrri!*!-2rrrm$rrrrJrrrri2rrrq$rrrrJrrrri2rrrq$r
- XrrrJrrrri2rrrq$rrrrJrrrri2rrrq$rrrrJrrrri2rrrq$rrrrJrrrri2rrrq$r
- XrrrJrrrri2rrrq$rrrrJrrrri2rrrq$rrrrJrrrri2rrrq"rrrrJ!N!G!!!"rr%1
- X'@mCIjNrQIqCrKRr'AZC1GN!q3"j!$Rrq2ri!!(rmIrjrrRrqIrjrrRrqIrjrrRr
- XqIrjrrRrqIrirrJ!!!J#3)[q3$3#3!rc-N![2m!!!r-b3"-rrrmb3"-r`!!$mc*!
- X%m3%"rmb3!mr`!!$mc2r-c2!3N!2mc-c2m!!!r-clr-c2!C!$r-c-cr!!!2c-qlr
- X-ca#3!ar-c-r`!!$mc-qlr-m"N!-2c-c2m!!!r-c-qlr`%*!$(mc-cr!!!2c-c-q
- Xlm3'3!`r-c-r`!!$mc*!$qlm3rr!Ic-c2m!!!r-rmc2qlrmc2r-c-cr!!!2c`(rm
- X3qlr-N!A2m!!!r2%"N!-2Zrc-N!62m!!!r2!3N!-Iqlr-N!62m!!!r2%"N!2mcl[
- Xmc*!$cr!!!2c`%*!$r-cl[mb3!mr`!!$mc`'3!rc-cl[mc-c2m!!!r-m3N!-Ic-c
- Xl[mc-cr!!!2c-r`%"$mc-cl[mc-r`!!$mc-crrrc-N!2l[mc2m!!!r-b3#-qlr-r
- X`!!$mc*!*qlr2m!!!r-b3#Fqlrr!!!2c-N!Vl[r!!!2c-N!V2[r!!!2c-N![rm!!
- X!rj!0m!!!$rq3$2!!N"3L!!%!N!93!83!C!&q"!*25`#3"3B!1!"'!Ab)!Pi`!*!
- X$'!"D!&i!k!'R!!8!N!Q#!!&`#J#3!aJ!3J"F!--"e`!&!*!*K`!!F!S!N!-B!%)
- X!A!$$!GF!"3#3#BB!!(!+!*!$'!"#!&`!``(A!!8!N!Q&!!"`#J#3!e)!"!#3"@-
- X",3"h!@F%!ePPF`#3"Q-!j`"h!5%%!Nj[!*!`"-!&3"CSJ#AM!!N!8-!"3!,!!
- XdS!)!!3#3"9d"+!"p!8L!!*!%C!!&!*!&B`%Y!(F"C`3$@@9c!*!'B`$R!(F")33
- X#6Qm!N!9M!+%!G`$E"!44G@Pd!*!`"-!&3"CSJ#AM!!N!8-!"3!,!!dS!)!!3#
- X3"9d"+!"p!8L!!*!%GJ!'!*!&B`%Y!(F"C`3$@@9c!*!'B`$R!(F")33#6Qm!N!9
- XM!+%!G`$E"!0"E'`!N!CM!&X!G`#9"!44G@Pd!*!`"-!&3"CSJ#AM!!N!8-!"3
- X!,!!dS!)!!3#3"9m"+3"r!8Q!!*!%'!"#!&`!``(A!!8!N!Q)!!"`#J#3!i3!"`#
- X3"@-",3"h!@F%!ePPF`#3"Q-!j`"h!5%%!Nj[!*!&B`#K!(F!fj!!!*!'B`"E!(F
- X!P33$3@aXG!#3"@-!&3"h!%m%"&&eDA3!N!8,!%`!9!&QL!*H-!#3"3`!&!!X!$5
- XJ!J!"!*!&AJ%S!(i"5)!!N!4L!!8!N!9U!2N!IJ%c"!*25`#3"@S!T3"q!0m%"N0
- XKEQ0PE!#3"3S!93!k!6Z)!Pi`!*!&4!"A!&3"0K!!N!B+!"`!+J!mS!)!!3#3"@3
- X!p!#%!45!!*!%'!#m!*S"'`&c!!8!N!Q*!!"S#J#3!f`!"3#3"8)!63"@!)F%!Np
- X,!*!&3J!,!&B!433'3f&ZBf9X!*!&"`!d!$F!e)J#AM!!N!9%!*J!9!$-%!P&C'P
- Xd)&4PH(3!N!B)!!S!+!!US!)!!3#3"6d!53"G!'Q!!*!%J!#3#!rrN!B!$mc-rrc
- X-cr!2crca$mc2m!r2[r!3r-r`$mclm3(mcr!2rrqrrrc2m!ra!I[mc-r`$r!3rlr
- X-cr!2c`(mqrc2m!r-rrc2[mr`$mb3"2[rm!r-N!62[r!2c*!&rr!2rj!'m!$rN!E
- X`!!!*L*!!!*!%rJ!'!!$rp`!'!!X$Z`!*!!)!N!-r!*!cf!#3"K4"!*!&+8!!!$!
- X!!"S!!!)B3!9V@)P!"q!j4##!3!59`(!F!F)8!"8!#2`2r`!IJ!N!0cJ#!!N!8
- XJ!!!1B!%!%!#3,h!!8)J#'!3"!S#L!!3##)!!!'!!35)6E!!!!LL!!!(iL8!&S#P
- X%))"!"*9!8"3"3K3!&3!8))r!rr!0#!#3!b4!8!,c`!!%)!-!#C!!"Y8jl%`J!!A
- X,R#qllR!!$R1mlhrZM`aK',[1mlmBaM(r'J)%!"!B)6$!!*!$!J#3"+QZq45K*!T
- X3V9c[JHT4&%8k)*4m3N3PSZa!!NNJ"@YBL8!&S#P%))"!"*9!8"3"3K3!&3!8))r
- X!rr!6!$i!0R4F3!Am)")D)!5!#5$dhpDbNUN!"MaLD%!aL##4M'-B`K'+$+'maM'
- X-54M&83d0!33!%#!J%%!!N!-#!*!%UY(i!!!B!*!$)aJ#J!#3!dBNJU*!!!!c-J!
- X#UJ!!!IL*3!@J+83JJ%!%P8"3&!&!!9!"3JMm$rm#-!%J!*V')J2I`rN5SN$,J
- Xj3*@&8Y3KF3!+D%+[H$'0Ad(XB`M#%)S0)9V'-B`*'-54&)J!IjchFrdbI@GjpRr
- X'0BaqU""6R[HpcR15BaJkMR1M'-BZjq,RcSfV-N!"9@!&DeMj3IfrkA`JJ%!%pAr
- XIprprPIJ9q"AiMm$rpf8(b2b)Vq,Ybr`JI-JJFh`TrTH2Z8JKVmq+U)dJa%k)J#+
- X[r3MldrS1)4R(dI1*'-5+*)J!M'-BT'-dDjM'1B*'094&"""8BaM'-Ba5IrpAdBa
- XM'-BeJ6a)dBjQl)rq'@Q3!!(rMhiaXBr(rj!%Pc---``JIJIr*riRrj!$q+8#K45
- X)V'-Dbr`rN5JrL(a!$T!!K4@e)5%!%bN$m-54H&p%p'-)`K'+M5%BaK')54M8K%4
- X)!)aK(k4M2'XBaM"b4M8N5+J3Gq-BaKrrdQ-BIT'-BaM'0)IN50'-BJ%)"#(b6@Y
- XBq8[p[IJm3!*!"2AhrhIrIi(j3Id9q%rrr!LM!SN8L(4M(G2m)")B)("r3!k3!!"
- X@XK)"!")U)LM%N3JJJ)4M'-)4LSbK'-B4M%N9E85%5!#FB4JNBc*V'-B`#Ne99
- XS%53R1Fi3K"*M'&+4M'FiaM@*,NR4R'2r'!4!FNJ"q)P+*D8!!%!#3!58&!&8!8!
- X!)8!P"2rr`)S`+6&)JN94"6r$q!##5!1)!!N!#!1Nd-!""Kcp`R1)je!!4dI1p
- Xq$SpdIaLk$SZ)iNBNrMMmEjlhSq-aDaGjm2'dLS[qU!iMfYDelh[5BarHlR1DelR
- X1m54'cQaL!1!!F'Q9DeL*5L@P!!"!!N!%P"3"9!&!!#&!*43J6rrm"fd#[ZG)FlE
- XJ2I`JIrNJ!!#!!2!!%!#3!a!J!*!&!3#3$!%!N!BJ!*!&3#!!!%!J!*!%3(!#F!#
- X3!i!!N!Q!"!!'3!#3#3(iL8SPT3!!3!*!"*38!93"3!!K3#88)%rrr!!J!!!%!*!
- X%)IrJ!!NJ!*!+)!#3"J)!N"J$J-!!!%!J!*!$!i!!"!#3!`%!N!N(!*!$!B!!N!J
- X&DeL*5LIR!!"!!N!%P"`"h!(!!#&!*43J6rrm!*!%"!#3"%!!N!-)`!#35J%!"!!
- X*!!i!%`!B!"S!(3!J!#8!+J!X!$%!-J!f!$X!23"#!%F!6!"4!&B!@`"J!'8!CJ"
- XS!'X!F!"c!(J!I3##!)F!M!#4!*B!Q`#J!+8!U!#Y!,)!Y`#m!-%!aJ$,!0!!e3$
- XD!0m!j!$T!1i!m`$i!2d!r`%$!38"#!%1!4!"&3%D!4m"*!%T!5d"-J%h!6J"1`&
- X!!8)"4`&-!9%"9J&E!@!"C3&T!@i"F`&i!Ad"JJ'(!BS"L`'1!C-"N`'B!Cd"SJ'
- XR!D`"X3'f!EX"`!(&!FS"c3(3!G)"e`(F!H%"jJ(V!I!"p3(k!Im#"!)*!Ji#%`)
- XB!Kd#)J)R!L`#-3)c!MJ#23*#!NF#5`*2!P3#@3*H!Q3#DJ*V!R!#G3*k!Rm#K!+
- X&!SN#M3+5!TF#Q`+J!U-#U!+Y!V)#YJ+k!Vd#``,*!X`#dJ,B!YX#h`,M!ZF#l3,
- Xc![F#r313!`N$$`-9!aX$(`-L!b8$+3-[!c8$13-m!d)$5!0,!di$9!0D!em$C30
- XU!fm$G30k!i!$K31+!im$P!1C!jm$T31V!l%$YJ1j!l`$[`2$!mJ$c324!pB$e`2
- XF!q!$j!2R!qd!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!
- X'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'N!-#"J%'!!B!"J!'!!B#"J%'!JB!"J!
- X'!3B!"J)'!3B!"J)'!!B!"J!'!!B!"J!'!!B!"J)'!3B""J!'!3B!"J!'!!B!"J!
- X'!!B!"J!'!!B!"J%'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J)
- X'!3B#"J%'!!B""J!'!!B!"J!'!!B""J!'!!B#"J!'!!B""J!'!!B!"J!'!!B!"J!
- X'!3B!"J!'!!B!"J!'!!B#"J)'!3B!"J#3!`B!"J!'!!B!"J!'!!B!"J!'!!B!"J%
- X'!3B""J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!JB!"J!
- X'!!B!"J%'!3B!"J!'!!B!"J!'!`B!"J!'!!B!"J!'!`B!"J!'!!B!"J!'!!B#"J!
- X'!!B!"J!'!!B$"J!'!!B$"J!'!!B$"J)'!JB#"J!'!!B#"J!'!!B!"J!'!!B!"J)
- X'!`B$"J)'!!B!"J!'!`B!"J!'!!B$"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!
- X'!!B!"J!'!!B!"J!'!3B""J-'!!B!"J!'!3B!"J)'!!B!"J!'!3B!"[rr!!!,hT!
- X!!*!%r`!(!!$rr3!(!!m%j3!-!!-!N!0#!*!m1!#3$!D!!*!&9DY@)P!"q!j4#"!
- X#!!L+F!F!F!(""3!!T!!+#"$q!rri!*!0)!#33!9%3!#3"!T3!!!-!!!,!*!$))!
- X!!!(q)P!"D!T4#"!#!!L+8!8!8!&""3!!T!!+#"$q!rri!*!*!m!!!#!!!!TJ!!!
- X3!!`!N"a`F!#3%"`!N!3'!*!%4)!!N!J3!*!'))!!9DY@)P!"D!T4#"!#!!L+8!8
- X!8!&""3!!T!!+#"$q!rri!*!&1!!B!23J!!!J!!!0N!!!e6NX8L!!!ZA1&mhh1!!
- X"`$[1prlSm-B4Llc[1r'-Bar)%J#"!!3'#%`!N!NUDi!L!)N"!)#R1q"l!))J$SJ
- X0(a")K0Lpa!!LLJ!!!IiL8!&S#P%)%!)!#)T3"3"3!8%&!!#N!!S)%2i$rrJ1q$i
- X!!"(1)!(m)!!J)!-!15"phpDb8UJ!!aia0"!Ba!JL)%BaM#%BS-SEM'-Ba*'-Ba$
- X)&3""!!3)#%``!*!%J!#3!bUd9%8S53+85eM'!+5844&4L"#SN!#4#@M'*!!NNJ"
- X9UeBL8!&S#P%)%!)!#)T3"3"3!8%&!!#N!!S)%2i$rrJ45#)!'j)a)!Am)!4-)!5
- X!+8p%e9,5BA%!"43K9#!Ba"!3,dBaM#%)S0)9c'-B`*'-Ba$%')!"!!3)#!33!*!
- X%J!#3!bS%3!!!"J#3!`M'!+!!N!-4L4(iN!!!!!c')!!))!!!!IiL8!&S#P%)%!)
- X!#)T3"3"3!8%&!!#N!!S)%2i$rrYa3"!!*$Sa%!Am2b+5*!5!+Ip%K6(8)A%!"63
- XQPl`R4UI)8-I3M#%)S1)4V'-B`*'-94&%%!!IjchFrdbIHGjpRG'0BaqU"#,R[Hp
- XcR15BaJkMR1M'-BZ3!%Ljmk0UaL3!&NTD9DY@2P"rErTI#"!#!!MkArhrhrprj6q
- X!TrJ+Ia$q!rrmNNI)r%4'-AJGr#!K8L",1#!24)qBL#'[`!P83IKL5-E!"*Eq-)q
- Xp2k$#%Cap(cL4M%LL3K!!)aM'+4M0'XBaMQ+4M984533M'-BaM'-8Q-I9r'-BaM'
- X0HIm50'1C[F6rkCUP!!(ripq-E'2arj!&LmB`B-B-%"r!Ira(riMrN!6mNN+&*%4
- X(mBlVr$rk-$q`I#!24)899#%K$iQ8J4"L5,`Rb*E'-)`K'+$L%BaK')54M&4%3K!
- X!)aK(k4M1'XBaM&b4M8N5+J3Mq-BaKrrdRriAT'-BaM'0%%J50'-BJ!L!35Y#eDY
- X@2P,rEhi2%!!L!!MkI[rlhrpri$q8"rd+I`Mrrr`$F8+**%4'-BeVr#!N%5")IL!
- X24!!9XU%"!"%9!4"L5)33%"I'-)`K'+M5%BaK')54M@*)34!!)aK'#4M0'XBaM!+
- X4M8N8+J3M#-BaK#%%Q-B8T'-BaM'0%NN50'-Brr#!3Rp#J!(q)P+*D8!!%!!L!!L
- X+!S!+8!&!!!38!%8+#!Mrrr`!%8+4*%4'+SlVr$mJm55`ID!24)"@X4)!%&%@%44
- XL5)U))*!!4M'-)4LSbK'-B4M%N9EL5%%3!#FBaLNBc*V'-B`LNe99'#S%CaR1Fia
- XK&*M'&D4M'FiaM9*,NR4R')!4!!3+T9@V9L*5L@P!!"!!)J!)LJ+!#P!"3!!%&!"
- XJJ)rrrm!"Sb6%1LU)+r`J"a$!!$KJ!%5!1Nk5!""Jjqi6R%FbJ!#24mlhi1M
- Xh4r',S1LiML4L6m#3!(mEjch)q-aDaGjm('dLS[qU!jVQYDecRZ5BaqklR1DelR1
- Xm54'cQaL!$J!2#PS!!IiL8SPT3!!3!#)!#)S#J!T3!8!!""3!43S)#2rrr!!@3Vl
- X(3K(EF"hri2J3!*!$)!"p!"!!$!!3)!#3"S!!N!a!!*!&F2!!N!83#!!!%!J!N!3
- X3(!%!N!3J!*!*)!%!!4!!N!P9UeBL8SPT3!!3!#)!#)S#J!T3!8!!""3!43S)#2r
- Xrr!!3!!!%!"!!!"(i!!!3!*!,)!#3"J%!N!dJ!*!,!4!)!!!3#!#3!`%3!!%!N!3
- XJ!*!*)!!!!H!!N!S"rL*5L@P!!"!!)J!)LJ+!#P!"3!!%&!"JJ)rrrm!*!%"!!
- Xi!!!3!*!$%!#3,H!`!*!)i!!#!*!%3!#3#!(!!*!09DY@)P+*qF!!%!!L!!L+!i!
- X1F!(!!!38!%8+#!Mrrr`!N!d3!*",!3!%!!N!$J!6!"N!'J!G!#!!*3!U!#`!-3!
- Xb!$F!2!!q!%-!5!"0!&)!9`"F!'%!CJ"R!'N!E3"b!(B!H`#"!)B!L`#3!!#9!*S
- X!R`#N!+N!V!#a!,B!Z`$!!-8!bJ$2!03!f3$H!1-!k!$Y!2)!p`$m!C!$"!%*!3`
- X"%3%B!4S"(`%N!5N",J%c!6F"2!&"!8)"43&+!8`"83&@!9X"B!&P!@S"E`&c!AJ
- X"I3'#!BF"M!'4!C3"P3'B!Cd"R3'L!DF"V!'a!EB"Z`(!!F8"bJ(2!G3"e`(D!G`
- X"i3(Q!HX"m!(e!IS"r`)%!JN#$J)6!KJ#(3)L!LF#,!)a!MB#1`)p!N)#4`*-!P%
- X#9J*E!Q!#C3*U!R!#GJ*h!R`#J3+)!Sm#PJ+A!TX#R`+N!UN#V3+b!V8#ZJ+r!X3
- X#b!,-!Y!#e`,H!Z)#k3,`![3#q3,q!j!$#J-4!aB$(3-N!bX$-J-j!d!$430*!dd
- X$8J0C!f!$C!0S!fm$GJ0k!hi$K31,!j!!!j8$QJ1I!k8$UJ1a!lB$Z`2!!m8$bJ2
- X2!p8$f`2J!q8$k!2V!qm$m`2i!rd%!33'"!F%$!33""3%'!3B""m!"`!(!!F!"`!
- X(!!F!"`!(!!F!"`!(!!F!"`!(!!F!"`!(!!F!"`!(!!F!"`!(!!F!"`!(!!F!"`!
- X(!!F!"`!(!!F$"`)(!3F""`%(!!F$"`)(!JF""`%(!JF""`-(!3F""`)(!3F""`%
- X(!3F""`%(!3F""`-(!JF""`%(!JF""`!(!3F""`%(!3F""`%(!3F""`)(!3F""`%
- X(!3F""`%(!3F""`%(!3F""`%(!3F""`%(!3F""`)(!3F#"`%(!!F$"`%(!3F""`%
- X(!3F#"`%(!3F$"`%(!3F#"`%(!3F""`%(!3F""`%(!3F""`%(!3F""`%(!3F#"`-
- X(!JF""`!!!3F""`%(!3F""`%(!3F""`%(!3F""`)(!JF#"`%(!3F""`%(!3F""`%
- X(!3F""`%(!3F""`%(!3F""`%(!3F""`%(!`F""`%(!3F""`%(!3F""`%(!3F""`%
- X(!`F""`%(!!F!"`!(!`F!"`!(!!F!"`!(!!F#"`!(!!F!"`!(!!F$"`!(!!F$"`!
- X(!!F$"`)(!JF#"`!(!!F#"`!(!!F!"`!(!!F!"`)(!`F$"`)(!!F!"`!(!`F!"`!
- X(!!F$"`!(!3F""`%(!3F""`%(!3F!"`%(!3F""`%(!3F""`%(!3F""`%(!JF#"`-
- X(!!F""`%(!3F""`-(!3F!"`!(!3F!!3!(rrm!N!0#!2!!P`#3,`%!!3!*!!",L3!
- X-!!",M!#3!aB!#PPj@fYFG9CS9fpBE&0L9'T9EP)X!*!$&J!+@9PE5ea99NKAEeK
- X-8d*85P918L`!N!0#B!!!Q!#3,`%!!3!*!!!i#3!-!!!i$!!!#-+3!!#3"1m!#J!
- X!rrB!#J!-!fF!#J!#!*!$0!#3-31!63#3(4q"`!#3"R!F"`"`!*!k9%#@8S!!!B!
- X!N")#S!#3""D"3!#3")!!8"3&!&!!N!N&%!$!`!!!J!#3&`('!*!1!i!$J!!!#3J
- X@3*%"N!"54!8N3%`!1!!"iH!!N!N@J8i!N!-0!!"3&!8!8!!"98!!!!mm!0qjr58
- XP!!#jGmAcIFi!!Bi6cZIlS`aL$PhRHGq-B-Br3S##!%$#%aJ!N!-%!*!$"8dK(IP
- Xd8*9TJ3UQED3UQN+TmN0%$h)5&iY!2RDJ!)JcrjEj83!!S!N!!&H8"3"3!!+@3#*
- X!(m2ie9C*4K)3!8H)M33'-33584)aP%4M$+-HBaM'*)aJaL-M3%)!33)"#!#3!`3
- X!N!-&9L%M'Ba!!*!,8Z4"eBh-bY`%8)J%*&5*+AE2B)!d!"%%J&cf"B(B!!+UL&!
- X2Rm-)Mp*3JKq3!!&AS#M'Vk'DU-)a%)`dLV@-BaJ5-95P&)J!EQGZIYbpZERY
- Xr-B-Cp8"bS4@-AGhGfCQEpZCQCTQC693lpBdY#UJq8*UN3[b8L8EXB,j)S"1iK-h
- X$r2m,B!#3!iS`Am-)K6Qj8K*mmN86T"m*ca!%UU[3Mh6r$L*0BqMja)U9%)N5!!C
- XQC5C66*QCR)8U9+NS)(+KeBaQN!9P8TQ3"8&14r@ec3U)#2bS(i%NT%PfVq$*@6q
- XK48PpI`h$h*!!!!!r"M$r``L!&'BL&4!#45"q'*)K#qNUrM#-4'10)JcM#0!NLSS
- XSN4)!(Q*p*P1-QCQBC5T8589!rq%6M'D3!f2rr9+CN!8"9$[[M5c)!$k3!-UN3[b
- XNL4DS%8pU)U%j8J8"hAj8rr`!!)S`Im-)!&5Q8K!3"%9%44L5)J33*dBaP%4MM+)
- X-i`V+*)N+4*%+!#CQB5C66*QCQ"8N++Q&3)aM%iaQN!3L)9+CN!8!j)A&LK)3!"%
- X3L!3N*+8T&UJ+5%TL38)T"3"9!&5!!!!)8LqI``L!14Q*)!%-1IZ%ja(-S!%34ml
- XR`k0dIJaG"dA%F3T%R`Sr(jRC(P-XQ@jiiZ3T&r9!M&haFjhGhGRCR9+@CQChG`"
- X24!@aiH!!!4pb[rmR@qN@Z"XqXD""!q5(!&8!8q!!N!-Kk*r$q!!3!!$!!3#3"b!
- X!$J#3#3%!N!8"KJ#3"!3#!!!)%!#3!`%$J!!)!*!!#3#MJ!N!S%!!!IJ!#3"!%
- X!N!4A!(!!N!8J(ri!N!B#!*!(3!#3&aJ-!!!)%!#3!`B!N!-3!*!&%!#3&33!N!J
- X#!*!%F!#3"J(!!*")!3!%!!N!$J!@!"d!(J!K!#3!+3!Z!$!!0!!e!$N!2J"!!%8
- X!5J"2!&3!@3"H!'-!D!"T!'X!EJ"c!(B!HJ#"!)B!L`#3!!#9!*N!R3#L!+F!U!#
- XY!,)!YJ#p!-)!a`$-!0%!eJ$E!1!!j3$U!2%!pJ$l!2m"N!-&!3F"#J%3!4)"&J%
- XD!4i")J%Q!5S",J%b!63"0`%l!6d"4!&)!8`"8!&8!9J"A!&I!@-"D!&[!A3"H!&
- Xm!Am"J!'$!BJ"L!'0!C)"P`'E!D!"T3'U!Di"XJ'f!ES"[J(#!FB"bJ(1!G)"eJ(
- XB!GS"h3(J!H3"k!(X!I!"p!(i!I`#!!)%!JJ##`)2!K3#'3)H!L-#+!)Y!M8#23*
- X&!NF#5J*2!PF#AJ*M!QJ#E!*`!R8#HJ*q!S-#L3+1!T%#P3+D!U%#U!+Z!V)#X`+
- Xh!Vi#`3,'!XX#d3,9!YN#h`,P!ZN#l`,e![`$!!-'!`S$$J-3!a)$&`-H!b-$+`-
- XV!bX$+`-V!bX$+`-V!bX$+`-V!bX$+`-V!bX$+`-V!bX$+`-V!bX$-3-h!ci!N!c
- XrN!B'"[q3"J!!rj!F!!IrN!B$!`%$!38""`!'!!N!#!%$!!3!"!%(!!B""!!&!3-
- X""J!'!3B!"J!'!!B!"J!'!!B!"J!'!J3""!%&!!B""3%'!!J""`!'!!B!"J!&!!8
- X!"J!'!3-!"J!'!!8!#!!'!!B!"J!'!!B!"J!'!!B!"J!)!!B!"J!&!33""J%%!!3
- X!"J!$!!8!"3!&!!8!"3!%!!8!"3!$!!3!"3!$!!J!"3!&!!8!"3!&!!8!"!!&!!B
- X!#!!'!!B!"3!%!!)!"!!'!*!$"J%(!!B!"3!'!!B!"J!&!!8!"3!&!!8!"3!&!!8
- X!"3!&!!8!!`!$!!3!"!!&!!8!"3!&!!8!"3!&!!8!"3!&!!3!"3!'!!B!"J!'!!B
- X!"J!*!!N!#3%%!!3!"J!*!!F"#J!'!!8!"3!'!!B!"3!'!!F$#!)&!38!"3!)!3N
- X!"J%'!3-!"3!)!38!"J%(!!J!#!%)!!B!"`-(!!B!#3!)!!8!"`%(!JF""!%%!!B
- X!#!!'!!RrN#J!"J!'!!F!N!3,*T!!!*!%l`!2!!$rp!!2!!m%Q3!-!!-!!3!q!*!
- XlF!%b!*!%"J#3&J&8!*!&(i$J!*!+$J!i!*!,"3#31LL)!Nb53!!!#3#3(4D!S!#
- X3"`jmi!S!+!#3#2!!!!8!"!!!-!!!"!#3(3F-!*!4"`!!L!#3!`3K!0N!L#!C"SN
- X%!d5#!3#3#`&8!*!&&[bJ!*!%$!!!#N5J#J!S!!!*5S!!!`(l`!!&d8jqB8NJ!!6
- X%lm&qGqmm!!$`!)qHmrpk'$$#$LpmpmprKJ`'-Id&!%#!!J-%%``!N!3#!*!%#TN
- X3FHrLp#J5P@B""&+Qfa#+9BK&+l!-H!21!!"d@J"qHJ!!%3$2rjE%Ti!!")!)J!!
- X+A+!+!#J!!"*-J!4'!I`[m!AApC+45-!!#5d3Jd#!--)!!3RJL''+%)BB-8-H---
- X--)L'$!Ba$)D!))!#"!3""!#3"!)!N!3+TK!L''--)!#3$3&*%S3&84iH*Z!!S)9
- X8!!S!*&%@p+K!!*!$%3!J#P#J#J!S!!!5P3"!$!(m+"!&JT58S)Ib!!S@%39"!&$
- X#""%+%8KJKK##'$*#V6$$$$!)KJa&845%!!lcRZjpYaE0ChRhGdBa'-IUJ#K5#&-
- X-,R1FjcR1Fk8V1FjcSaM&5j!!JHP4)5%P3!#JM!#%Rd35%4D8X#lMT)!4!#!+8+I
- Xk!#MZ!*!$%+4IpI`S%!@2c'K!K-)!%K36#Ah`6d0)#"6T6k#'%))B0%*0-----!L
- X&%NP+&%3!%BaM&)j6*c1BaML+4M%Ba#U!+&))8``aM'-BaM'-C5c'-BaM'-8e8([
- Xj8Pc-T%!4)*98L%4%F4&fPl!a&%5!)l*3#P#N'i$[%3#3!`%8Irhm+"!&K3B3S)8
- X[Ra)8)*%$#*!!`K2N*5SSB)IHRrJi3Jb`r3r2#)85U)SN4!!2M#-8M&0')aM'-)*
- X'+U9%8N"%LJp,$#plh[I#-BaP+-BaM'-Ba!8iKrP48Y#!!IRmT!2`2d53!*&'PM!
- X[&-Mm)8a3Qp1rH2q$%3#3!hi-IrRm+"!&J!8Y&)3#!#)83'%$#*!![L!#45SSB)B
- X3KKJd3Jb``3d!L)5LU84%*!!4M#2dM&1')aM'-(*&5U*%LS"%LJK,$$'-BaM$rrr
- XP+-BaM'-Ba!83Kr93h0#!!#)Ja95)4%84%ADAk&(e8)C"!)NSdJP,`HmIrq!!!Ja
- X$qI`S%!@!"9-)K!)!)K5!Ii-*%))3"%6hq'#'%)BF-N)-F-%-J)L%S4&%4#3!%B`
- XM")a64L-BaM!+484&43U!rri)4``aM'-B`K#%*5M'-BaM'-3&%([cd0,-J!"#))3
- X!K)4&%K%@P!K4"P'&36++6r2j5RmT%!#3!a%84Krm+"!&!"@6&%J!!%%P#)&$#4#
- X%#qJ#""KKLK#'($$($",)K%%5*)38!"'-Ba5-8bBM'-B`LNb%5-B+J)-''%F
- X--BaM'-BaM'8SaM'-CcR-"9%&i9%K)3!"r#'&9!!%4544&T`%N444J)&0"5!!!8S
- X!+4%!N!5N5!(m+"!&J!k-iNJ!)-$(p`%mm3mj4"""a"qHmr"k'p$q$#p!p#m)H%%
- X5*2`8IircRZ4m8aBM&hR`FE5%5,rUJ)-&lm,cch[HplR1Fk8SZFjcQYDd!lk%!AB
- XH(J!!K$ji!rrNHXr4&S!-cZZ1J)%"r*!!!!&+!#MZ!*!%3m!"r#r`"3!%!!!`!#!
- X!N!K!!*!1#!#3"JB-!*!!)!N!0!)!#3"!3(!*!$3!#3"K!!N!S"!(J!N!J"9!!
- X!3!!!&S!!N!8"!*!%!8S!+!#3"N!!"q!!"3#3"N!!N!L!!*!FL!)!N!0!)!#3"%3
- X!N!3J!*!')!#3'B!!!"D!!*!&!3#3"!(+!#J!N!8%3!#3"!8!N#a`$!#3#6J!N!4
- X!!*!F!93!N!8IJ!#3"3)!N!81!$J!N!8$J!#3"!8!N%8"!!3!#`!3!"F!(`!J!#-
- X!*J!X!$%!-`!i!$N!2J"%!%B!6!"5!&N!A`"P!'X!F3"h!(J!HJ"q!)-!K`#0!*8
- X!R!#L!+J!VJ#c!,J![J$%!-8!b`$4!0B!h3$M!1N!l`$e!2X"N!-)!3i"&3%H!5-
- X"+!%Y!5m"0!%f!6N"33&$!8J"63&5!9F"A!&J!@8"DJ&X!@m"G!&f!Am"K!'*!Bi
- X"N`'B!Cd"S3'Q!DX"Y!'j!Ei"``('!FF"bJ(3!G!"e`(H!H3"k3([!I8"q`)!!J8
- X##J)2!K3#'3)H!L-#+!)Y!M)#0!)f!MN#2!*"!NB#5`*3!P8#@J*I!Q3#D3*Z!R%
- X#G3*k!S!#KJ+-!T)#Q3+K!UN#XJ+d!VF#[3,(!Xm#eJ,E!Ym#i`,S!Zm#p!,k!`%
- X$"J-*!`i$%`-E!b3$+`-`!c%$0J-q!d%$4`01!e3$@30H!f8$E!0a!hJ$I`1)!i`
- X$N`1B!jd$R`1K!kB$V31b!lm$[`1r!lm$[`1r!lm$[`1r!lm$[`1r!lm$[`1r!lm
- X$[`1r!lm$[`1r!m8$b`29!!$rr`#3#2q3"JJ)rj!'!!$rN#3%"!%$!38"#3%(!3N
- X!#3%$!38""3%)!3F""!%(!3-""`%)!`J"#!%)!3J"#!%)!3J"#!%)!3-""!%'!3F
- X""J%)!3S"#3%)!3J"#!%(!3F"#!%)!J8!"`%)!3F"#3%)!3J"#!%)!3J"#!!)!3J
- X"#3%,!3F""`%(!33""`%%!33!#!%%!3F""`%(!3F""`%'!3F""`%&!3B""`%&!3X
- X""`%(!3F""`%'!3F""J%(!3F"#`%(!3F""`%&!3-""3%)!!!"#3%*!3J""`%)!3J
- X"#!%(!3F""`%(!3F""`%(!3F""`%(!3F#"3%&!38""3%(!3F""`%(!3F""`%(!3F
- X""`%(!38""J%(!3J"#!%)!3J"#3%+!3S"#`%%!38"#!%-!!J!#`%(!3B""J%(!3N
- X""`%)!3N##J%&!!B!"J%+!3X!"`%)!J3""`%+!38"#!%*!3J"#!)+!!J"#3)*!3J
- X$$!%,!3B"#3%(!3F""!%%!3F"#3%)!3rrN#J##3)*!!Uff`#3!d3!N!N)!!`!HJ"
- X"!(S!$!!)!*!6#!!-!(i!I`"q!!`!#!#3#`F!#3#3!d3!N")"`!&!!8!(F!)J!8!
- X!J!#3%J(!!F!"`!I`!q!"`!#!!!N!#!#3!d3!N!S3!$!!AJ##!&i!-!!3!*!6%!!
- X`!(i!rJ"q!$!!%!#3#JJ!"J#3!d3!N"83!#N!&`!*!!N!(`#3&4!!13!I!!m!$`!
- XI!!X!#`#3!d3!N"3)!*3!k!#3!!#3!!$i!*!9#!#F!2J!m!$`!2J!!!X!"!#3!d6
- Xi!*!!!*!!!1J!P!!)!*!9q!$`!2!!q!#F!!J!N"B%!!3!N!0%!*!%$r!)%!J3#"!
- X)%!J3#"!)%!J3#"!2m!#3#!r`(rJBN")Iq!r`!*!&"`!(!*!$4!%!!S!%3!lJ!S!
- X#J!1!!*!5!3!$J!I!$q!$J!1!!i!!N"-'!!F!N!0%!"m!#3!*!"F!+3!3!*!9(`!
- X2!!m!(`!j!"!!N"8%!!X!N!-3$djPG%KKBfXJ9fPZC'phF`#3!b!!-!!3!8)"l3!
- X%!*!)#d4eEQGPEfiJ6@&`+!S!N!-k18jPG%KKBfXJGM-Z-5iJ5@0[ER-JBRNJ4'p
- XZB@aN)%`Z)%jKFfJJ,5"%,NjKFfK!GA4PH'&c,Q9NG3#3!i!2rj!&!!!2$*!%$r!
- X!$mrr`2rrc`!2$!`2r`rrm!r2m-m3m-$`$`qr$`%2$2!2`2[r%"r!m!m-$lrrr`c
- X`$rrrqr$!`2!2m3(r[`rmm!r`%2$lm-$`$`m"r!qr$2!2`2r``2[`m!m2$!rr$lr
- X`$m#3"I[`$rq3"[!!N!1!$rq3"3!!$``-$``2m!!2cm$lm-r2!!rar2[mrrr`$r!
- XIqrm3m2!2m3(lm3(mm!r`(r[r%2$`$r(mqrcar2!2cm$lm-r!m!m-$2[m$!c`$m$
- X`qr$``2!2$!rlr``-m!r!`2[``-$`$``2qrm-$2!2`2$lm2$!m!rrN!E`!*!$3(r
- X`3"KFp%(H@H*GmNrb4r*rJRrDIZ*HFNik8Gj!$RrqIr"rq(rmIrjrrRrqIrjrrRr
- XqIrjrrRrqIrjrrRrqIri!N!0!Ir"!'&18HVjqqRlkI[TkZP+53S*+SNE#3S*'`NU
- XLIrjrm(riIrarrRrqIrjrrRrqIrjrrRrqIrjrrRrqIrjrrJ!!!3!Irri!%!!$!"!
- X!!S!A2I*!%!!#)"!!!K!AZq))%!Ilq"'(r!JAIrq)%52q#"#6rJJAcrr)%#Iq#"!
- X6rJJ6'Bc)&rb!#"Iq3!JArc[)&rb3!!JAr%J)%rrRD"2q%JJ4rJN)&(hFL"!!!NJ
- X3!!%S&mrJQ"!!!%J3!!!S%!!!'"rrrrJIrri!(rrr!"rrri!Irrr!(rrri"rrrr!
- XIrrri(rrrq"rrrrJIrrri(rrrq"rrrrJIrrri(rrrq"rrrrJIrrri(rrrq"rrrrJ
- XIrrri(rrrq"rrrrJIrrri(rrrq"rrrrJIrrri(rrrq"rrrrJIrrri(rrrq"rrrrJ
- XIrrri(rrrq!!!!3!Irri!%!!$!"%"!S!6!S*!%i+#)"H#JK!A`SIi&r+Ib"rqrqJ
- XIr[rS(rlrk"rqrqJIr[rS&r+Ib"I#KmJAJS2)%i+$L"-kZBJ4HVd)%(lm#""qr!J
- X3([!)%!lJ#"!'`!J3$Z!)%"l`#""qr!J3I[`)%(Um#"!kZ!J3!S!)(rrrq"rrrJ!
- XIrrm!(rrrJ"rrrm!IrrrJ(rrrm"rrrrJIrrri(rrrq"rrrrJIrrri(rrrq"rrrrJ
- XIrrri(rrrq"rrrrJIrrri(rrrq"rrrrJIrrri(rrrq"rrrrJIrrri(rrrq"rrrrJ
- XIrrri(rrrq"rrrrJIrrri(rrrq"rrrrJIrrri!!!#!!!2rj!*m!#3"3m-N!Rr!*!
- X&$m#3#Ic`!*!%$`rr$2rr$rrr$2c2!*!%$m#3#Ic-m!#3!`m-N!Rmc-m!N!-2crr
- X`rr$rrr$!r-c-m!!!$`b3"!m"!3rmrj!$m!!!$m$2m-$2%*!$(m#3!r!!!!m2rlr
- Xrrr%"!3rrr!c`!!!2`-qlm-$`%*!$m-$!m!!!$``-qlm-m3'3!r`-$2!!!!r2rrq
- Xlra#3"2rr`2!!!!m-N!2l[`'3"2`-$2!!!!r!N!22Zr!Ira$``-$`!!!2$2m-$rZ
- Xrr!cr$2m-m!!!$mm3rr!IZr$!N!A`!!!2$`'3"2Zr$*!&m!!!$mm3N!6rZrr`rrr
- X!m!!!$`m"N!-2$2Zr$*!%m!!!$mm3N!-I`-qlm-#3!r!!!!m-m3%"$rrrqlrr$rc
- X`!!!2`2!3N!2``-qlm-$!m!!!$``2m3%"r!`-qlm-$2!!!!r2`-rrrmrrcrqlm-$
- X`!!!2$*!*qlm-m!!!$m#3#Fqlm2!!!!m2rrm-rj!$r!`-qlr`!!!2`*!+cl[`!!!
- X2$*!,qr!!!!r!N![2m!!!$rq3$2!!N!-#!!!2rj!*m!#3"3m-N!Rr!*!&$m$2`*!
- X$cm#3!rc`!*!%$`cr$*!$qr`-$2c2!*!%$m$`m-$!qr$!`2c-m!#3!`m2!I`-$2[
- Xm$!cmc-m!N!-2ca!I`-$lm-$2rj!$m!!!$`m"!Im-qr`2m3%2$2!!!!r`%*!$rr[
- Xrm"#3!r$`!!!2m3'3"2[a!C!%r2!!!!r`%*!%qr!3N!6`m!!!$r%"N!6lm3'3"2c
- X`!!!2m"#3!rrlrr!3N!2`m!!!$`m"!Im-qr`2m3%2$2!!!!r2%"r!`2[``-m3(m$
- X`!!!2$`(m$!clr!`-m3m-m!!!$m$`m-$!qr$!`2$``2!!!!m-r`crr2[mrr`2r!c
- X`!!!2`-r2m2$lm2$rcm$!m!!!$``-$`!Iqrm!(`b3!r!!!!r!`-r`!2[`!2r!N!2
- X`!!!2$*!$$`$lm"m-N!6`!!!2`*!%m2[`m-#3"2!!!!m-N!32qrm-N!A`!!!2`*!
- X%m2[`m-#3"2!!!!m-N!-2!2[`(`b3"2!!!!r!`-r`!2[`!2r!N!2`!!!2$!`2!"r
- Xlr`!I$*!$m!!!$m$!cr$`qr$`rm#3!r!!!!m-N!2rr2[mrr`-N!2`!!!2`*!&qr$
- X!N!A`!!!2rj!-m!#3"!G"8&"-!*!'"e0"9N8!!3#3"!G38N9'!!)!N!3(9%9B9!!
- X$!*!%"d*26N8!"!#3"$aZD$-a!*!$!8C548B!"!#3!i!!!3#"!!)!JJ!$!)-!"!#
- X%5801)`!%!!!$k!!"!qN!!J2U!!-$k`!%!q`!N!-1!$i!6J#k!E)6L3!%-!S!N!-
- X9!%)!,J$D!E)!"3#3#"G`!*!%X`#"!*!)rrr9234'D@aP#%p`C@iJ6@&`!%m!!!T
- X5C@4bBAFJ6@&`!&)4!!a3FQ9fD@peFb"0FfF!8"%!#P*PF'pcDA4TEfi!6J!!"80
- XXEh0P!&F!!!%Y!*!%"e*PCh9XBA)!'mJ!$89ZG'9b)%9iF'a[FQ8!!&J!!5d!N!3
- X-6h"dD@pZ)%9NDA6*!%8!!!%Y!*!%"&0KGQ8!8e-!!5d!N!3%8A9TG!"483#3"8J
- X!JJ#3#2q3!rX%4@4TG!49EQ4[!&S!!!%Y!*!%!d0eG!"B!!!%3fp`H3"$!!!&8'&
- XcG'8!9J!!"80XC@&b!*!)V!#$!*!)rrrpr`0,BQ3-3fpZG(*[E#",CAPc!"[*!!Y
- X3G@jMG(9KG'P[EJ!EbJ!)3R*KBfYPG(-!'mX!"@%J,5"Y!"[-!!9Z)#dJHJ!Ec3!
- X&35!Y)%d!'mi!"8iJ,5"D!"[2!!8`)#dJ13!Ed!!",3#3"!JSCA0MBA"P+3#3"!F
- XSFh"KBf8T!*!%##KNC@aPG'8T!*!%##KbCA4eFQiT!*!)F`#%!*!)rj!$f`4)C@a
- X`"dp`G'P[ER-!!%m!!5d!N!3%5'9XF!!!2`!-4'9cBh*TBQ8J5f9j!!!Q!!%Y!*!
- X%"eCPFR0TEfi!!(B!"dKTFh4[FRN!!&B!%&CPFR0TEfiJ4Q9KG(9bCA-!!#-!N!8
- XU!)!!N!MrN!2l!4313@*[GA3J6Q9d5'&MDmN!N!3",3#3#-B!K3#3#2rrrHm%5@j
- XQE`e*ERCPER4[FRNJ3@aX!!"T!""*ERCPER4[FRNJ8f9XC@0d!!"*!!C"C'TeFh3
- X!!#-!!5d!N!3*6'p[Db"%EhGZ!!!k!!a%CA0MFQPLC5"2EQ8!!$X!$84PFf0bD@*
- XP)%eKERN!!#m!$84PFf0bD@*P)&4bBA!!!&i!!5d!N!3-3f&XE#"0EfjcG'9b!!"
- X$!!Y1B@eP)%pLDQ9MG!!!)`!,4'PcBfpfCA*TCA-!!&`!N!@5!)B!N!MrrrZl"89
- XaG@P`"d0eFR*PER3!'p%!!5d!N!3&9fPPE'3!!(F!"94SFQph!!"d!!9"F("XH3!
- X!B3!",3#3"!TAC@&b)%&bE@pb!!"A!!K8B@YP)%pQCJ!!9!!+3A0V)&*PE@pfC3!
- X!33!",3#3"!C3GA3J6fi!!&!!"P*PE@pfC3!!8J#3"C-!K`#3#2q3!hX$3@0d"&G
- XKDA3!!#i!!5d!N!3)9'9XCA"[FR3!9"%!"%TeEA!!!#-!"de[ER0dCA)!!#-!"&G
- XTF'8!!#-!!5d!N!3&3A"`E(N!!'%!!e"KH3!!F!!%5fPMD`"%%3!%3fKKG!!!)`!
- X&6fCQCA)!!#-!"&"bBAN!!#-!"&4eFQi!!#-!N!@j!)J!N!Mrrr[I"8eKCfPM#84
- XbEh!J5A4PE3!!C!!,4(*[F#"6C@aPBh3!!%3!"P"TBfYeF!!!,!!09'pRCfaP)("
- XTBfYeF!!!3!!",3#3"!0&BA3!!'8!"&*PB@3!!()!"9&eB@CQ!!"a!!0%DA!!!#-
- X!!5d!N!3,6'PcG#"6F'9XE(-!!(J!#N0KFh3J8h"PE'`!!&S!!eTKF!!!HJ!'5@j
- XfEfYP!!!M!!05G@)!!#-!N!@h!)N!N!MrrlZr"%*TG(-'8f9KFQ0S!!"c!!T$E'p
- XcC5"%Efpb!!"M!!P2F'9Z)%4[Eh)!!'m!"8&`F'aj!!"K!!4,D@0V!%34!!%Y!*!
- X%"P9ZG(*KF!!!)`!&4QpbBf8!!#-!"%a[Eh3!!#-!!5d!N!3(4@jRFQ&fC3!!43!
- X$4'P`!!!M!!06DA3!!#-!!5d!!#-##%0XD@e`)&9`!!!m!!T$E'PYBL"%EhGZ!!!
- Xq!*!&L`$+!*!)rj!%#h"eEQ0dG@&dD@pZ!L!Z!*!%!L!X!*!%!L!l!*!%!L!k!*!
- X%!L!K!*!%!L!r!*!%!L!V!*!%!L!Y!*!%!L!p!*!%!L!M!*!%!L!N!*!%!L"!!*!
- X%!L!Q!*!%!L!U!*!%!L"q!*!%!L"I!*!)H!$,!*!)rj!%#'*bB@0VCA4c!9X!N!3
- X"A3#3"!%S!*!%!5N!N!3"H`#3"!&p!*!%!6`!N!3"2J#3"!&H!*!%!@!!N!3"*`#
- X3"!%L!*!%!9`!N!3",`#3"!&m!*!%!58!N!KM!-`!N!MrN!3&B5!Y)'d"B3#3"!&
- XL!*!%!@-!N!3"C!#3"!&P!*!%!@B!N!3"C`#3"!&S!*!%!@N!N!3"DJ#3"!&V!*!
- X%!@`!N!3"E3#3#'-!c3#3#2q3"!9Z)#dJHJ&Z!*!%!@m!N!3"F!#3"!&a!*!%!A)
- X!N!3"F`#3"!&d!*!%!A8!N!3"GJ#3"!&h!*!%!AJ!N!3"H3#3"!&k!*!)B`$1!*!
- X)rj!%"8%J,5"0!8%!N!3"3J#3"!&$!*!%!83!N!3"43#3"!&'!*!%!8F!N!3"5!#
- X3"!&*!*!%!8S!N!3"5`#3"!&-!*!%!8d!N!KM!-m!N!MrN!3&6L!Y)&S"6J#3"!&
- X2!*!%!9!!N!3"83#3"!&5!*!%!9-!N!3"9!#3"!&9!*!%!9B!N!3"9`#3"!&B!*!
- X%!9N!N!3"@J#3#'S!b3#3#2rrrIm-BfpZG(*[E#"VCAPc!@)!-3!!!@S!-J!!!@i
- X!-`!!!@J!0!!!!@`!0J!!!AN!0`!!!@X!1!!!!A8!13!!!5d!N!3"C!"%!!!"F!"
- X3!!!"FJ"5!!!"G!"8!*!'83$3!*!)rj!%"6!J,5!j!6!!N!3"-3#3"!%b!*!%!6-
- X!N!3"0!#3"!%e!*!%!6B!N!3"0`#3"!%i!*!%!6N!N!L4!-J!N!MrN!3'GfPkBA*
- XN#N&dG(*TBR9dCA-!!(J!$84PG'9MG#"9ER0PC@i!!'8!#8CXEfpb)%eKF!!!CJ!
- X34f9ZCA*KG'8J6@pZFh4PFJ!!C`!)5@4PER4TCRN!!'N!#8a[Bf&dD@pZF`!!E`!
- X16'9fC@`J9'9XCA"[FR3!!(B!">FfJ!!(F!N!9I!0%!N!MrN!3(Bh9bFQ9ZG!C
- XAC@&`Efi!!#N!"8&bE@pb!!"E!!95D@jRF`!!23!'3@eeE'9d!!!L!!98EfpXF`!
- X!+!!%4fpXC!!!*!!'8h"PE'ac!!!V!*!&,!#!!!S!J!#3!i%!N!1#!*!$J`#3!i3
- X!N!1&!*!$KJ#3!iF!N!1)!*!$L3#3"5`!b!!+!-J!N!2*!*!$bJ#3!mX!N!2-!*!
- X$c3#3!mi!N!22!*!$d!#3!p%!N!@3!!!0%D8b-$%J3fpZG(*[E#",CAPc%+8b-$)
- XJ8(9ZBh4eBA4TEfi0T6)`-b"#FQ&MDf9dF`UP-M!d)'%J,5"Y#U8b-$8JEL!Y)(S
- X+T6)`0L"")#dJ63UP-M!h)%iJ,5"D#U8b-$JJ-#!Y)$N#T5d)'k9PFf0KF'8()+9
- XcF'&MC3J)T@4PE'9dC3J0TA*PG(9bEJ#3!bJ!$!bP-M!j)%0eFR*PER3#T5d"G`&
- Xd!@%#T5d"9`&8!8%#T5d"8!&5!*!$C3!0"`+PBh4X,@)(#U9MG'`YDJF1T@0dE#e
- XZ"`LPBh4X,@J($+9MG'`YE!FCT@0dE#ej"`ZPBh4X,@X(&D9MG'`YG3+P,3F%T@0
- XdE#eN"a#PBh4X,A!(%U9MG'`YFJF8T@0dE#ed!*!$)J!3!5i",!%l!6S")3%r!5X
- X",3%p!5-"*!&!!5B"+J&q!9m!N!-L!"!"@`&G!5J"+3&l!Ad"2!%q!9i"B!%R!5)
- X"A!%[!A`"*3#3!a`!$3&K!@)"B`&N!@8"CJ&R!@J"D3&U!@X"E!&Y!*!$(!!0!@i
- X"E`&`!A%"FJ&c!A3"G3&f!AF"H!&j!AS!N!-F!!d"33!8-"4!&&!8B"4`&)!8N
- X"5J&,!8`"63#3!a`!$3&1!8m"8!&4!9)"8`&8!98"9J&A!9J"@3&D!*!$&J!+!6!
- X"-3%b!6-"0!%e!6B"0`%i!6N!N!0#!!J('+9MG'`YH!F&T@0dE#eP"`DPBh4X,@B
- X("k9MG'`YC`F*T@0dE#eT"`qPBh4X,@m(&U9MG'`YGJFAT@0dE#eh!*!$%!!(!5N
- X"@`%p!5)"+!%N!5X!N!0,#c&cG#"YC@je)%P%4&G54!SM)'pQ)%e&6P9c6d019!8
- XUN!9-8e4$"P*PFb"*4%4A8N3)8Q9cCA*fC@4'9e*%"5U3"8a69%8!N!-V!a1!!*!
- X$"6-Z-5ic(P0dD@0SG'PZCb"0BA4SC@eKG'PcBfJJ3f9ZG(*eE3#3!bX$%i!!N!-
- X&-bia,M-H-bia,M-0U6%j1$8Y-6Nj-b"0,L"6G'9`D'9ZFfpZ!*!$e!!,!*!&G!$
- Xq!)J"BJ3%8'aKH3#3"A3!9J#)!,S%"&&eDA3!N!9`!2S!M!&QJ!#3"Ni!H3"I!*S
- X!N!G1!0S!A`$l!*!(6J&&!&m"CJ#3"di!93"H!(Q)"9*[E'8k"!#3"8i!ZJ"H!0U
- X)"&0PH$S!N!91!4N!AJ&&L!90Ef4P1J#3"K-!93!N!@@)$&GSEb"KFQ8JH@pe2`#
- X3"5N!@3!j!@-3"%jKE@8!N!82!"J!,`!iS!)!!3#3!aX!#!&2!U8Y!6m"*J+P,3&
- Xf!9B))hCPFR0TEfi!N!-Q!!`"D3&*"b0KC'TeFh3#T5d"1J%l!5m"AJ+P,3&$"50
- XZB@eP!9`!N!00!!i",J+P,3J8T5"MG'`YG!8MDR9YF!JME@pZFh4PFJ8MGfP`C3+
- XP,3&K!A!("+9MG'`YC!8MBfKKG!BMEfCQCA)&)h"bBAN&)h4eFQi!N!-Z!!m"C!&
- X%!5`"3!+P,3&P!A)"F33MC'P`!U8Y!AJ"@J&k"b0TERC[Df8%)h*eBJ#3!c3!!J#
- X3"@F""!"l!93%!Np,!*!`"4!&J"B)J%AM"H-3#3"3S!'!!U!$LJ!J!"!*!$4!!
- X$!*!&A3%1!(%"5J3#6Qm!N!9G!&d!F3#C"!0CCA-!N!B+!%m!8!&6L!*H-!#3"3S
- X!&J!U!$DJ!J#3"3i!4!"%!,)"e3#!4%3`#J#3!`i!5J"U!0-"ea1)!!3`#J#3!d!
- X!%!&c!@-"E`&K"`5PBh4X,@3#T5d()h9ZG(*KF!BMCQpbBf8&)fa[Eh3#T5d"433
- XMC'P`"#0cDA3#T5d"2!%q!!!"!*!$9[d!!&Ap!!!(U`!d2Q`%b!#3!a`'@J!89dP
- X14!!(!+T869"-!!%"#NjeEA!!!3%L38a59!!$!6T%594-!!S"DP088L-!%3(ZD@0
- Xc0!!%!XCTBh-M!!3$!NP$6L-!"!-qD@0X0!!%!hT%6%p(!!B$YNC26P3!!`3+4Np
- X14!!""$T$99*6!!J%8P088L!!!!5qEQJc-3!!"-T'8N9'!!3%eN*14%`!!!85689
- X193!6"4j06P8M!!%'$RCPFR-!!3BQ!)!!,3#3!hJ!0$ZS!)%!N!Fd1k3!JJ!)!*!
- X$)!!d1k!!J`!2!*!$hJ!d1j`!K!!A!*!$3!!d1jJ!K3!F!*!$@J!d1j3!KJ!K!!!
- X"!J!d1j!!!)F!Z3!!25i!0$Z-!)!!-J#3!ji!0$Zi!)%"4J!!8X3!0$ci!)!!0`!
- X!*LJ!0$`8!)%!33!!*N)!0$`3!)(rrb!!#1!!0$U%!)$rr`!!9C8!0$V-%iMrr`!
- X!9DF!0$Q!%iRrr`!!4DF!0$TJ!)(rrb!!#2!!-d#!!)$rr`!!$)`!0$f)!),rr`!
- X!$[i!0$dd!)Mrr`!!$RB!0$d`!)Arr`!!$5)!0$dX!)Err`!!$AJ!0$dS!)Irr`!
- X!$H!!0$dN!)Rrr`!!$i!!0$dJ%iMrr`!!948!0$eX%iRrr`!!98d!0$SS&h$rr`!
- X!8h%!0$YJ!)!!Ub!!!5B!0$`)!)-!e!!!8&X!0$`%!)3!f!!!9%N!0$`!!)8!h3!
- X!9'J!0$[m!)B!iJ!!81m!0$[i!)F!k!!!9*)!0$[d!)J!l!!!91-!0$[`!)N!mJ!
- X!9EN!0$[X!-N!p`!!84X!0$[S!-S""!!!8B3!0$[N!-X"%!!!8DS!0$[B!-`"'3!
- X!8G!!0$[8!-d"(`!!8I!!0$[3!-i"*3!!8K!!0$[-!-m"+`!!8M!!0$[)!0!"-3!
- X!8P!!0$[%!-J"0`!!8QS!0$[!!0%"2J!!8V!!0$Zm!qMrr`!!!8!!0$b%!qRrr`!
- X!!F3!0$b!!qVrr`!!$r!!0$am!q[rrb!!2C!!!$3mH!2XrrmJ!$i8!$3mG!2Srrm
- X!!!*)!$3mQ!2Trrm!!!+-!$3mP!2Urrm!!!T%!$3mN!!$krrr)!!qQ!!d2)`$l2r
- Xr)!!qh!!d2)J$k2rr!!!#d!!d2+`$kIrr!!!$e!!d2+J$k[rr!!!*3!!d2+3$krr
- Xr)!!r)!!d2+!$l2rr)!"!*!!d2*`$k2rr!!!%f!!d2-!$kIrr!!!'h!!d2,`$k[r
- Xr!!!+L!!d2,J$krrr)!""+!!d2,3$l2rr)!"$,!!d2,!!L!"*!!!1@J!d24!!K`"
- X@!!!-cJ!d23`!KJ"5!!!-kJ!d23J!K3"2!!!0"J!d233!L3"E!!!2C!!d23!!JJ"
- XT!!!-XJ!d22`AF!&,!!"&Z3!d26a,LIrr)!!3G!!d21a,M2rr!!!D!!!d21"-#3#
- X%)!!QSJ!d20a-$!#4)!![D!!d20J!P`"`"!!PiJ!d223!Q!"j"!!QA!!d22!#!2r
- Xr)!!m3J!d2@!#!rrr)!!mLJ!d29`#"2rr)!!mdJ!d29J#"Irr)!!kNJ!d293#"rr
- Xr)!!kfJ!d29!#!Irr)!!l)J!d28`#"[rr)!!lDJ!d28J##2rr)!!lXJ!d283#![r
- Xr)!!lqJ!d28!!J!#F!!!p'J!d2!`!!2rr)!!p8J!d1Q3!J2rr)!"&-!!d203!JIr
- Xr)!"&1`!d20!!J[rr)!"&4J!d2-`!Jrrr)!"&83!d2-J!K2rr)!"&A!!d2-3!J2r
- Xr)!"&C`!d2@3!JIrr!!"&dJ!d2(!!J[rr!!"'L3!d2'`!Jrrr!!"'e3!d2'J!K2r
- Xr!!"(K3!d2'3!J2rr!!"(r!!d2'!!KIrr!!")+J!d2&`!K[rr!!")p!!d2&J!Krr
- Xr!!"*LJ!d2&3!L2rr!!"+)3!d2&!!LIrr!!"+hJ!d2%`!b[rr!!",Q3!d2%J!brr
- Xr!!"-+!!d2%3!c2rr!!"-T!!d2%!!cIrr!!"0#`!d2$`!c[rr!!"0FJ!d2$J!crr
- Xr!!"0f3!d2$3!bIrr!!"13!!d2$!!d2rr!!"1VJ!d2#`!b2rr!!"2!`!d2#J!dIr
- Xr!!"2Q!!d2#3!J!$%&!"2q`!d24`!J3$-&!"3+`!d19`!!Irr)!"63J!d1l!!![r
- Xr)!"6%`!d1k`(6@9cFf&RC3C6G'&dGA-(4(9ZCf9[EJ40C@je"&4PH(3,4'PKCfj
- X[Fh4TBh-%6P9-6!41G@e`#99ZFfKTCR4PC!G6D'PQG'9N"APZ6Q&a!RPZ!hPZF34
- XjEQ&a$90YB@aX)%GPG'aTEQ8'8(*[EA"d#%KKBfY'Efjd#P"65'&MDdC[ER3-8&0
- X)B@0V4QpZG#!j#P"65'&MDdC[ER318(*PCL"'D@aP)%jKE@806@PcBbiJ8h4bD@j
- XRF`T89&NJ9fPZC'ph"fePER9LBA)(Fh9LE@9ZG30,BQ3%5'9XF!4*EQC["89aG@P
- X`!d&MG!90B@GTB`4#DA4c$'0[ER4bEf`JDf9jF`Y`G@jMG(9KG'P[EJKLFQ&MDf9
- XdF`9K)#dJE39Z)#dJHJ9")#dJ6391)#dJ@J8`)#dJ13ChDATKFQ3(Bh9bFQ9ZG!4
- X06P8M"90dBA*d1MB:
- END_OF_FILE
- if test 28405 -ne `wc -c <'sys/mac/NHrsrc.hqx'`; then
- echo shar: \"'sys/mac/NHrsrc.hqx'\" unpacked with wrong size!
- fi
- # end of 'sys/mac/NHrsrc.hqx'
- if test -f 'sys/unix/snd86unx.shr' -a "${1}" != "-c" ; then
- echo shar: Renaming existing file \"'sys/unix/snd86unx.shr'\" to \"'sys/unix/snd86unx.shr.orig'\"
- mv -f 'sys/unix/snd86unx.shr' 'sys/unix/snd86unx.shr.orig'
- fi
- echo shar: Extracting \"'sys/unix/snd86unx.shr'\" \(28922 characters\)
- sed "s/^X//" >'sys/unix/snd86unx.shr' <<'END_OF_FILE'
- X# This is a shell archive. Save it in a file, remove anything before
- X# this line, and then unpack it by entering "sh file". Note, it may
- X# create directories; files and directories will be owned by you and
- X# have default permissions.
- X#
- X# This archive contains:
- X#
- X# READ.ME
- X# install.bsd
- X# spkr.7
- X# Makefile
- X# spkr.c
- X# spkr.h
- X# interp.c
- X# Files
- X# Install
- X# Master
- X# Name
- X# Node
- X# Remove
- X# Size
- X# System
- X# playtest
- X#
- Xecho x - READ.ME
- Xsed 's/^X//' >READ.ME << 'END-of-READ.ME'
- XX Console Speaker Driver Package (v1.1)
- XX
- XX by Eric S. Raymond (esr@snark.thyrsus.com)
- XX
- XXThis package gives 80386 machines running SVr3.2 or later the ability to play
- XXtunes on the console speaker. It has been extended to 386BSD (and possibly
- XXBSDI) by Andrew A. Chernov, and to SCO UNIX 3.2.4 (and possibly other VPIX
- XXsystems) by Andreas Arens.
- XX
- XXThe following files are contained in the kit:
- XX
- XXDocumentation and examples:
- XXREAD.ME -- this file
- XXspeaker.7 -- man page for the driver
- XXplaytest -- test script exercising familiar tunes
- XX
- XXInstallable driver kit parts, for SVr3.2 or later:
- XXFiles -- list of driver package file locations
- XXInstall -- installation script for driver kit
- XXMaster -- mdevice entry for speaker driver
- XXName -- name entry foe speaker driver
- XXNode -- /dev node specification file
- XXRemove -- Driver removal script
- XXSize -- installation size data
- XXSystem -- sdevice entry for speaker driver
- XX
- XXDriver source code, for SVr3.2 or later and 386BSD:
- XXMakefile -- Makefile for driver code
- XXspkr.c -- the driver source
- XXspeaker.h -- ioctl interface file
- XX
- XXCommon source code:
- XXinterp.c -- play string interpretation code
- XX
- XXFor SVr3.2 or later, simply type `make' and wait. Then type ./Install
- XXand follow its instructions. You will have to install the man pages by hand.
- XXBe aware that the speaker.7 man page uses tbl(1) constructs.
- XX
- XXFor 386BSD, follow the installation instructions in install.bsd.
- XX
- XXFor SCO UNIX 3.2.4, no new kernel drivers are needed, and you need only
- XXcopy interp.c to your src directory and proceed with making NetHack, with
- XXVPIX_MUSIC set in unixconf.h.
- XX
- XXInteresting tunes mailed to the author will be periodically posted in batches
- XXand added to the test script for future versions.
- XX
- XX Revision notes
- XX
- XX1.1 -- fixed minor bug in M[LSN] interpretation, added octave-tracking.
- XX Tweaked the playtest examples.
- XEND-of-READ.ME
- Xecho x - install.bsd
- Xsed 's/^X//' >install.bsd << 'END-of-install.bsd'
- XXCopy spkr.c and interp.c to /sys/i386/isa
- XXCopy spkr.h to /sys/sys
- XX
- XX-----------------------------------------------------------------------------
- XX
- XXFile /sys/i386/conf/YOUR_MACHINE_NAME
- XXadd following line:
- XX
- XXpseudo-device speaker
- XX
- XX-----------------------------------------------------------------------------
- XX
- XXFile /sys/i386/conf/files.i386
- XXadd following line:
- XX
- XXi386/isa/spkr.c optional speaker
- XX
- XX-----------------------------------------------------------------------------
- XX
- XXFile /sys/i386/i386/conf.c
- XX[major number 20 (hex) is registered for spkr driver, don't change it]
- XXadd following code:
- XX
- XX#include "speaker.h"
- XX#if NSPEAKER > 0
- XXint spkropen(),spkrclose(),spkrwrite(),spkrioctl();
- XX#else
- XX#define spkropen enxio
- XX#define spkrclose enxio
- XX#define spkrwrite enxio
- XX#define spkrioctl enxio
- XX#endif
- XX ...
- XX
- XXstruct cdevsw cdevsw[] =
- XX{
- XX ...
- XX
- XX { spkropen, spkrclose, enxio, spkrwrite, /*20*/
- XX spkrioctl, enxio, enxio, NULL,
- XX enxio, enxio, enxio },
- XX ...
- XX
- XX-----------------------------------------------------------------------------
- XX
- XXMake corresponding device:
- XX
- XX mknod /dev/speaker c 32 0
- XX
- XX[major number 32 (20 hex) is registered for spkr driver, don't change it]
- XX
- XX-----------------------------------------------------------------------------
- XX
- XXGo to /sys/i386/conf and type
- XX config YOUR_MACHINE_NAME
- XXthen go to /sys/compile/YOUR_MACHINE_NAME and type
- XX make depend
- XX make
- XX
- XEND-of-install.bsd
- Xecho x - spkr.7
- Xsed 's/^X//' >spkr.7 << 'END-of-spkr.7'
- XX.TH SPKR 7
- XX.SH NAME
- XXspkr \- console speaker device driver
- XX.SH DESCRIPTION
- XXThe speaker device driver allows applications to control the PC console
- XXspeaker on an IBM-PC-compatible machine running UNIX.
- XX.PP
- XXOnly one process may have this device open at any given time; open() and
- XXclose() are used to lock and relinquish it. An attempt to open() when
- XXanother process has the device locked will return -1 with an EBUSY error
- XXindication. Writes to the device are interpreted as 'play strings' in a
- XXsimple ASCII melody notation. An ioctl() for tone generation at arbitrary
- XXfrequencies is also supported.
- XX.PP
- XXSound-generation does \fInot\fR monopolize the processor; in fact, the driver
- XXspends most of its time sleeping while the PC hardware is emitting
- XXtones. Other processes may emit beeps while the driver is running.
- XX.PP
- XXApplications may call ioctl() on a speaker file descriptor to control the
- XXspeaker driver directly; definitions for the ioctl() interface are in
- XXsys/spkr.h. The tone_t structure used in these calls has two fields,
- XXspecifying a frequency (in hz) and a duration (in 1/100ths of a second).
- XXA frequency of zero is interpreted as a rest.
- XX.PP
- XXAt present there are two such ioctls. SPKRTONE accepts a pointer to a
- XXsingle tone structure as third argument and plays it. SPKRTUNE accepts a
- XXpointer to the first of an array of tone structures and plays them in
- XXcontinuous sequence; this array must be terminated by a final member with
- XXa zero duration.
- XX.PP
- XXThe play-string language is modelled on the PLAY statement conventions of
- XXIBM BASIC 2.0. The MB, MF and X primitives of PLAY are not useful in a UNIX
- XXenvironment and are omitted. The `octave-tracking' feature is also new.
- XX.PP
- XXThere are 84 accessible notes numbered 1-83 in 7 octaves, each running from
- XXC to B, numbered 0-6; the scale is equal-tempered A440 and octave 3 starts
- XXwith middle C. By default, the play function emits half-second notes with the
- XXlast 1/16th second being `rest time'.
- XX.PP
- XXPlay strings are interpreted left to right as a series of play command groups;
- XXletter case is ignored. Play command groups are as follows:
- XX.PP
- XXCDEFGAB -- letters A through G cause the corresponding note to be played in the
- XXcurrent octave. A note letter may optionally be followed by an \fIaccidental
- XXsign\fR, one of # + or -; the first two of these cause it to be sharped one
- XXhalf-tone, the last causes it to be flatted one half-tone. It may also be
- XXfollowed by a time value number and by sustain dots (see below). Time values
- XXare interpreted as for the L command below;.
- XX.PP
- XXO <n> -- if <n> is numeric, this sets the current octave. <n> may also be one
- XXof 'L' or 'N' to enable or disable octave-tracking (it is disabled by default).
- XXWhen octave-tracking is on, interpretation of a pair of letter notes will
- XXchange octaves if necessary in order to make the smallest possible jump between
- XXnotes. Thus "olbc" will be played as "olb>c", and "olcb" as "olc<b". Octave
- XXlocking is disabled for one letter note following by >, < and O[0123456].
- XX.PP
- XX> -- bump the current octave up one.
- XX.PP
- XX< -- drop the current octave down one.
- XX.PP
- XXN <n> -- play note n, n being 1 to 84 or 0 for a rest of current time value.
- XXMay be followedv by sustain dots.
- XX.PP
- XXL <n> -- sets the current time value for notes. The default is L4, quarter
- XXnotes. The lowest possible value is 1; values up to 64 are accepted. L1 sets
- XXwhole notes, L2 sets half notes, L4 sets quarter notes, etc..
- XX.PP
- XXP <n> -- pause (rest), with <n> interpreted as for L. May be followed by
- XXsustain dots. May also be written '~'.
- XX.PP
- XXT <n> -- Sets the number of quarter notes per minute; default is 120. Musical
- XXnames for common tempi are:
- XX
- XX.TS
- XXa a a.
- XX Tempo Beats Per Minute
- XXvery slow Larghissimo
- XX Largo 40-60
- XX Larghetto 60-66
- XX Grave
- XX Lento
- XX Adagio 66-76
- XXslow Adagietto
- XX Andante 76-108
- XXmedium Andantino
- XX Moderato 108-120
- XXfast Allegretto
- XX Allegro 120-168
- XX Vivace
- XX Veloce
- XX Presto 168-208
- XXvery fast Prestissimo
- XX.TE
- XX.PP
- XXM[LNS] -- set articulation. MN (N for normal) is the default; the last 1/8th of
- XXthe note's value is rest time. You can set ML for legato (no rest space) or
- XXMS (staccato) 1/4 rest space.
- XX.PP
- XXNotes (that is, CDEFGAB or N command character groups) may be followed by
- XXsustain dots. Each dot causes the note's value to be lengthened by one-half
- XXfor each one. Thus, a note dotted once is held for 3/2 of its undotted value;
- XXdotted twice, it is held 9/4, and three times would give 27/8.
- XX.PP
- XXWhitespace in play strings is simply skipped and may be used to separate
- XXmelody sections.
- XX.SH BUGS
- XXDue to roundoff in the pitch tables and slop in the tone-generation and timer
- XXhardware (neither of which was designed for precision), neither pitch accuracy
- XXnor timings will be mathematically exact. There is no volume control.
- XX.PP
- XXIn play strings which are very long (longer than your system's physical I/O
- XXblocks) note suffixes or numbers may occasionally be parsed incorrectly due
- XXto crossing a block boundary.
- XX.SH FILES
- XX/dev/speaker -- speaker device file
- XX.SH AUTHOR
- XXEric S. Raymond (esr@snark.thyrsus.com) Feb 1990
- XEND-of-spkr.7
- Xecho x - Makefile
- Xsed 's/^X//' >Makefile << 'END-of-Makefile'
- XX#
- XX# Speaker driver package makefile
- XX#
- XXCFLAGS = -I. -O # -DDEBUG
- XXLDFLAGS = -s
- XX
- XXall: Driver.o
- XX
- XXinstall:
- XX ./Install
- XX
- XXDriver.o: spkr.c
- XX $(CC) $(CFLAGS) -c spkr.c
- XX mv spkr.o Driver.o
- XX
- XXclean:
- XX rm -f Driver.o *~ speaker.shar
- XX
- XXDSP = Files Install Master Name Node Remove Size System
- XXshar:
- XX shar READ.ME install.bsd spkr.7 Makefile spkr.[ch] \
- XX interp.c $(DSP) playtest >speaker.shar
- XEND-of-Makefile
- Xecho x - spkr.c
- Xsed 's/^X//' >spkr.c << 'END-of-spkr.c'
- XX/*
- XX * spkr.c -- device driver for console speaker on 80386
- XX *
- XX * v1.1 by Eric S. Raymond (esr@snark.thyrsus.com) Feb 1990
- XX * modified for 386bsd by Andrew A. Chernov <ache@astral.msk.su>
- XX */
- XX
- XX#ifdef __386BSD__
- XX#include "speaker.h"
- XX#endif
- XX#if !defined(__386BSD__) || (NSPEAKER > 0)
- XX
- XX#ifdef __386BSD__
- XX#include "types.h"
- XX#include "param.h"
- XX#include "errno.h"
- XX#include "buf.h"
- XX#include "uio.h"
- XX
- XX#define CADDR caddr_t
- XX#define err_ret(x) return(x)
- XX#else /* SYSV */
- XX#include <sys/types.h>
- XX#include <sys/param.h>
- XX#include <sys/dir.h>
- XX#include <sys/signal.h>
- XX#include <sys/errno.h>
- XX#include <sys/ioctl.h>
- XX#include <sys/user.h>
- XX#include <sys/sysmacros.h>
- XX#include <limits.h>
- XX
- XX#define CADDR char *
- XX#define err_ret(x) u.u_error = (x)
- XX#endif
- XX
- XX#include "spkr.h"
- XX
- XX/**************** MACHINE DEPENDENT PART STARTS HERE *************************
- XX *
- XX * This section defines a function tone() which causes a tone of given
- XX * frequency and duration from the 80x86's console speaker.
- XX * Another function endtone() is defined to force sound off, and there is
- XX * also a rest() entry point to do pauses.
- XX *
- XX * Audible sound is generated using the Programmable Interval Timer (PIT) and
- XX * Programmable Peripheral Interface (PPI) attached to the 80x86's speaker. The
- XX * PPI controls whether sound is passed through at all; the PIT's channel 2 is
- XX * used to generate clicks (a square wave) of whatever frequency is desired.
- XX *
- XX * The non-BSD code requires SVr3.2-compatible inb(), outb(), timeout(),
- XX * sleep(), and wakeup().
- XX */
- XX
- XX/*
- XX * PIT and PPI port addresses and control values
- XX *
- XX * Most of the magic is hidden in the TIMER_PREP value, which selects PIT
- XX * channel 2, frequency LSB first, square-wave mode and binary encoding.
- XX * The encoding is as follows:
- XX *
- XX * +----------+----------+---------------+-----+
- XX * | 1 0 | 1 1 | 0 1 1 | 0 |
- XX * | SC1 SC0 | RW1 RW0 | M2 M1 M0 | BCD |
- XX * +----------+----------+---------------+-----+
- XX * Counter Write Mode 3 Binary
- XX * Channel 2 LSB first, (Square Wave) Encoding
- XX * MSB second
- XX */
- XX#define PPI 0x61 /* port of Programmable Peripheral Interface */
- XX#define PPI_SPKR 0x03 /* turn these PPI bits on to pass sound */
- XX#define PIT_CTRL 0x43 /* PIT control address */
- XX#define PIT_COUNT 0x42 /* PIT count address */
- XX#define PIT_MODE 0xB6 /* set timer mode for sound generation */
- XX
- XX/*
- XX * Magic numbers for timer control.
- XX */
- XX#define TIMER_CLK 1193180L /* corresponds to 18.2 MHz tick rate */
- XX
- XXstatic int endtone()
- XX/* turn off the speaker, ending current tone */
- XX{
- XX wakeup((CADDR)endtone);
- XX outb(PPI, inb(PPI) & ~PPI_SPKR);
- XX}
- XX
- XXstatic void tone(hz, ticks)
- XX/* emit tone of frequency hz for given number of ticks */
- XXunsigned int hz, ticks;
- XX{
- XX unsigned int divisor = TIMER_CLK / hz;
- XX int sps;
- XX
- XX#ifdef DEBUG
- XX printf("tone: hz=%d ticks=%d\n", hz, ticks);
- XX#endif /* DEBUG */
- XX
- XX /* set timer to generate clicks at given frequency in Hertz */
- XX#ifdef __386BSD__
- XX sps = spltty();
- XX#else
- XX sps = spl5();
- XX#endif
- XX outb(PIT_CTRL, PIT_MODE); /* prepare timer */
- XX outb(PIT_COUNT, (unsigned char) divisor); /* send lo byte */
- XX outb(PIT_COUNT, (divisor >> 8)); /* send hi byte */
- XX splx(sps);
- XX
- XX /* turn the speaker on */
- XX outb(PPI, inb(PPI) | PPI_SPKR);
- XX
- XX /*
- XX * Set timeout to endtone function, then give up the timeslice.
- XX * This is so other processes can execute while the tone is being
- XX * emitted.
- XX */
- XX timeout((CADDR)endtone, (CADDR)NULL, ticks);
- XX sleep((CADDR)endtone, PZERO - 1);
- XX}
- XX
- XXstatic int endrest()
- XX/* end a rest */
- XX{
- XX wakeup((CADDR)endrest);
- XX}
- XX
- XXstatic void rest(ticks)
- XX/* rest for given number of ticks */
- XXint ticks;
- XX{
- XX /*
- XX * Set timeout to endrest function, then give up the timeslice.
- XX * This is so other processes can execute while the rest is being
- XX * waited out.
- XX */
- XX#ifdef DEBUG
- XX printf("rest: %d\n", ticks);
- XX#endif /* DEBUG */
- XX timeout((CADDR)endrest, (CADDR)NULL, ticks);
- XX sleep((CADDR)endrest, PZERO - 1);
- XX}
- XX
- XX#include "interp.c" /* playinit() and playstring() */
- XX
- XX/******************* UNIX DRIVER HOOKS BEGIN HERE **************************
- XX *
- XX * This section implements driver hooks to run playstring() and the tone(),
- XX * endtone(), and rest() functions defined above. For non-BSD systems,
- XX * SVr3.2-compatible copyin() is also required.
- XX */
- XX
- XXstatic int spkr_active; /* exclusion flag */
- XX#ifdef __386BSD__
- XXstatic struct buf *spkr_inbuf; /* incoming buf */
- XX#endif
- XX
- XXint spkropen(dev)
- XXdev_t dev;
- XX{
- XX#ifdef DEBUG
- XX printf("spkropen: entering with dev = %x\n", dev);
- XX#endif /* DEBUG */
- XX
- XX if (minor(dev) != 0)
- XX err_ret(ENXIO);
- XX else if (spkr_active)
- XX err_ret(EBUSY);
- XX else
- XX {
- XX playinit();
- XX#ifdef __386BSD__
- XX spkr_inbuf = geteblk(DEV_BSIZE);
- XX#endif
- XX spkr_active = 1;
- XX }
- XX#ifdef __386BSD__
- XX return(0);
- XX#endif
- XX}
- XX
- XX#ifdef __386BSD__
- XXint spkrwrite(dev, uio)
- XXstruct uio *uio;
- XX#else
- XXint spkrwrite(dev)
- XX#endif
- XXdev_t dev;
- XX{
- XX#ifdef __386BSD__
- XX register unsigned n;
- XX char *cp;
- XX int error;
- XX#endif
- XX#ifdef DEBUG
- XX#ifdef __386BSD__
- XX printf("spkrwrite: entering with dev = %x, count = %d\n",
- XX dev, uio->uio_resid);
- XX#else
- XX printf("spkrwrite: entering with dev = %x, u.u_count = %d\n",
- XX dev, u.u_count);
- XX#endif
- XX#endif /* DEBUG */
- XX
- XX if (minor(dev) != 0)
- XX err_ret(ENXIO);
- XX else
- XX {
- XX#ifdef __386BSD__
- XX n = MIN(DEV_BSIZE, uio->uio_resid);
- XX cp = spkr_inbuf->b_un.b_addr;
- XX error = uiomove(cp, n, uio);
- XX if (!error)
- XX playstring(cp, n);
- XX return(error);
- XX#else
- XX char bfr[STD_BLK];
- XX
- XX copyin(u.u_base, bfr, u.u_count);
- XX playstring(bfr, u.u_count);
- XX u.u_base += u.u_count;
- XX u.u_count = 0;
- XX#endif
- XX }
- XX}
- XX
- XXint spkrclose(dev)
- XXdev_t dev;
- XX{
- XX#ifdef DEBUG
- XX printf("spkrclose: entering with dev = %x\n", dev);
- XX#endif /* DEBUG */
- XX
- XX if (minor(dev) != 0)
- XX err_ret(ENXIO);
- XX else
- XX {
- XX endtone();
- XX#ifdef __386BSD__
- XX brelse(spkr_inbuf);
- XX#endif
- XX spkr_active = 0;
- XX }
- XX#ifdef __386BSD__
- XX return(0);
- XX#endif
- XX}
- XX
- XXint spkrioctl(dev, cmd, cmdarg)
- XXdev_t dev;
- XXint cmd;
- XXCADDR cmdarg;
- XX{
- XX#ifdef DEBUG
- XX printf("spkrioctl: entering with dev = %x, cmd = %x\n", dev, cmd);
- XX#endif /* DEBUG */
- XX
- XX if (minor(dev) != 0)
- XX err_ret(ENXIO);
- XX else if (cmd == SPKRTONE)
- XX {
- XX tone_t *tp = (tone_t *)cmdarg;
- XX
- XX if (tp->frequency == 0)
- XX rest(tp->duration);
- XX else
- XX tone(tp->frequency, tp->duration);
- XX }
- XX else if (cmd == SPKRTUNE)
- XX {
- XX#ifdef __386BSD__
- XX tone_t *tp = (tone_t *)(*(caddr_t *)cmdarg);
- XX tone_t ttp;
- XX int error;
- XX
- XX for (; ; tp++) {
- XX error = copyin(tp, &ttp, sizeof(tone_t));
- XX if (error)
- XX return(error);
- XX if (ttp.duration == 0)
- XX break;
- XX if (ttp.frequency == 0)
- XX rest(ttp.duration);
- XX else
- XX tone(ttp.frequency, ttp.duration);
- XX }
- XX#else
- XX tone_t *tp = (tone_t *)cmdarg;
- XX
- XX for (; tp->duration; tp++)
- XX if (tp->frequency == 0)
- XX rest(tp->duration);
- XX else
- XX tone(tp->frequency, tp->duration);
- XX#endif
- XX }
- XX else
- XX err_ret(EINVAL);
- XX#ifdef __386BSD__
- XX return(0);
- XX#endif
- XX}
- XX
- XX#endif /* !defined(__386BSD__) || (NSPEAKER > 0) */
- XX/* spkr.c ends here */
- XEND-of-spkr.c
- Xecho x - spkr.h
- Xsed 's/^X//' >spkr.h << 'END-of-spkr.h'
- XX/*
- XX * spkr.h -- interface definitions for speaker ioctl()
- XX *
- XX * v1.1 by Eric S. Raymond (esr@snark.thyrsus.com) Feb 1990
- XX * modified for 386bsd by Andrew A. Chernov <ache@astral.msk.su>
- XX */
- XX
- XX#ifndef _SPKR_H_
- XX#define _SPKR_H_
- XX
- XX#ifdef __386BSD__
- XX#ifndef KERNEL
- XX#include <sys/ioctl.h>
- XX#else
- XX#include "ioctl.h"
- XX#endif
- XX
- XX#define SPKRTONE _IOW('S', 1, tone_t) /* emit tone */
- XX#define SPKRTUNE _IO('S', 2) /* emit tone sequence*/
- XX#else /* SYSV */
- XX#define SPKRIOC ('S'<<8)
- XX#define SPKRTONE (SPKRIOC|1) /* emit tone */
- XX#define SPKRTUNE (SPKRIOC|2) /* emit tone sequence*/
- XX#endif
- XX
- XXtypedef struct
- XX{
- XX int frequency; /* in hertz */
- XX int duration; /* in 1/100ths of a second */
- XX}
- XXtone_t;
- XX
- XX#endif /* _SPKR_H_ */
- XX/* spkr.h ends here */
- XEND-of-spkr.h
- Xecho x - interp.c
- Xsed 's/^X//' >interp.c << 'END-of-interp.c'
- XX/*
- XX * interp.c -- device driver for console speaker on 80386
- XX *
- XX * v1.1 by Eric S. Raymond (esr@snark.thyrsus.com) Feb 1990
- XX *
- XX * this is the part of the code common to all 386 UNIX OSes
- XX *
- XX * playinit() and playstring() are called from the appropriate driver
- XX */
- XX
- XX#ifdef __386BSD__
- XX#include "param.h"
- XX#else
- XX#include <sys/param.h>
- XX#endif
- XX
- XX#ifndef HZ
- XX#define HZ 60
- XX#endif
- XX
- XX
- XX/**************** PLAY STRING INTERPRETER BEGINS HERE **********************
- XX *
- XX * Play string interpretation is modelled on IBM BASIC 2.0's PLAY statement;
- XX * M[LNS] are missing and the ~ synonym and octave-tracking facility is added.
- XX * Requires tone(), rest(), and endtone(). String play is not interruptible
- XX * except possibly at physical block boundaries.
- XX */
- XX
- XXtypedef int bool;
- XX#define TRUE 1
- XX#define FALSE 0
- XX
- XX#define toupper(c) ((c) - ' ' * (((c) >= 'a') && ((c) <= 'z')))
- XX#define isdigit(c) (((c) >= '0') && ((c) <= '9'))
- XX#define dtoi(c) ((c) - '0')
- XX
- XXstatic int octave; /* currently selected octave */
- XXstatic int whole; /* whole-note time at current tempo, in ticks */
- XXstatic int value; /* whole divisor for note time, quarter note = 1 */
- XXstatic int fill; /* controls spacing of notes */
- XXstatic bool octtrack; /* octave-tracking on? */
- XXstatic bool octprefix; /* override current octave-tracking state? */
- XX
- XX/*
- XX * Magic number avoidance...
- XX */
- XX#define SECS_PER_MIN 60 /* seconds per minute */
- XX#define WHOLE_NOTE 4 /* quarter notes per whole note */
- XX#define MIN_VALUE 64 /* the most we can divide a note by */
- XX#define DFLT_VALUE 4 /* default value (quarter-note) */
- XX#define FILLTIME 8 /* for articulation, break note in parts */
- XX#define STACCATO 6 /* 6/8 = 3/4 of note is filled */
- XX#define NORMAL 7 /* 7/8ths of note interval is filled */
- XX#define LEGATO 8 /* all of note interval is filled */
- XX#define DFLT_OCTAVE 4 /* default octave */
- XX#define MIN_TEMPO 32 /* minimum tempo */
- XX#define DFLT_TEMPO 120 /* default tempo */
- XX#define MAX_TEMPO 255 /* max tempo */
- XX#define NUM_MULT 3 /* numerator of dot multiplier */
- XX#define DENOM_MULT 2 /* denominator of dot multiplier */
- XX
- XX/* letter to half-tone: A B C D E F G */
- XXstatic int notetab[8] = {9, 11, 0, 2, 4, 5, 7};
- XX
- XX/*
- XX * This is the American Standard A440 Equal-Tempered scale with frequencies
- XX * rounded to nearest integer. Thank Goddess for the good ol' CRC Handbook...
- XX * our octave 0 is standard octave 2.
- XX */
- XX#define OCTAVE_NOTES 12 /* semitones per octave */
- XXstatic int pitchtab[] =
- XX{
- XX/* C C# D D# E F F# G G# A A# B*/
- XX/* 0 */ 65, 69, 73, 78, 82, 87, 93, 98, 103, 110, 117, 123,
- XX/* 1 */ 131, 139, 147, 156, 165, 175, 185, 196, 208, 220, 233, 247,
- XX/* 2 */ 262, 277, 294, 311, 330, 349, 370, 392, 415, 440, 466, 494,
- XX/* 3 */ 523, 554, 587, 622, 659, 698, 740, 784, 831, 880, 932, 988,
- XX/* 4 */ 1047, 1109, 1175, 1245, 1319, 1397, 1480, 1568, 1661, 1760, 1865, 1975,
- XX/* 5 */ 2093, 2217, 2349, 2489, 2637, 2794, 2960, 3136, 3322, 3520, 3729, 3951,
- XX/* 6 */ 4186, 4435, 4698, 4978, 5274, 5588, 5920, 6272, 6644, 7040, 7459, 7902,
- XX};
- XX
- XXstatic void playinit()
- XX{
- XX octave = DFLT_OCTAVE;
- XX whole = (HZ * SECS_PER_MIN * WHOLE_NOTE) / DFLT_TEMPO;
- XX fill = NORMAL;
- XX value = DFLT_VALUE;
- XX octtrack = FALSE;
- XX octprefix = TRUE; /* act as though there was an initial O(n) */
- XX}
- XX
- XXstatic void playtone(pitch, value, sustain)
- XX/* play tone of proper duration for current rhythm signature */
- XXint pitch, value, sustain;
- XX{
- XX register int sound, silence, snum = 1, sdenom = 1;
- XX
- XX /* this weirdness avoids floating-point arithmetic */
- XX for (; sustain; sustain--)
- XX {
- XX snum *= NUM_MULT;
- XX sdenom *= DENOM_MULT;
- XX }
- XX
- XX if (pitch == -1)
- XX rest(whole * snum / (value * sdenom));
- XX else
- XX {
- XX sound = (whole * snum) / (value * sdenom)
- XX - (whole * (FILLTIME - fill)) / (value * FILLTIME);
- XX silence = whole * (FILLTIME-fill) * snum / (FILLTIME * value * sdenom);
- XX
- XX#ifdef DEBUG
- XX printf("playtone: pitch %d for %d ticks, rest for %d ticks\n",
- XX pitch, sound, silence);
- XX#endif /* DEBUG */
- XX
- XX tone(pitchtab[pitch], sound);
- XX if (fill != LEGATO)
- XX rest(silence);
- XX }
- XX}
- XX
- XXstatic int abs(n)
- XXint n;
- XX{
- XX if (n < 0)
- XX return(-n);
- XX else
- XX return(n);
- XX}
- XX
- XXstatic void playstring(cp, slen)
- XX/* interpret and play an item from a notation string */
- XXchar *cp;
- XXsize_t slen;
- XX{
- XX int pitch, lastpitch = OCTAVE_NOTES * DFLT_OCTAVE;
- XX
- XX#define GETNUM(cp, v) for(v=0; isdigit(cp[1]) && slen > 0; ) \
- XX {v = v * 10 + (*++cp - '0'); slen--;}
- XX for (; slen--; cp++)
- XX {
- XX int sustain, timeval, tempo;
- XX register char c = toupper(*cp);
- XX
- XX#ifdef DEBUG
- XX printf("playstring: %c (%x)\n", c, c);
- XX#endif /* DEBUG */
- XX
- XX switch (c)
- XX {
- XX case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G':
- XX
- XX /* compute pitch */
- XX pitch = notetab[c - 'A'] + octave * OCTAVE_NOTES;
- XX
- XX /* this may be followed by an accidental sign */
- XX if (cp[1] == '#' || cp[1] == '+')
- XX {
- XX ++pitch;
- XX ++cp;
- XX slen--;
- XX }
- XX else if (cp[1] == '-')
- XX {
- XX --pitch;
- XX ++cp;
- XX slen--;
- XX }
- XX
- XX /*
- XX * If octave-tracking mode is on, and there has been no octave-
- XX * setting prefix, find the version of the current letter note
- XX * closest to the last regardless of octave.
- XX */
- XX if (octtrack && !octprefix)
- XX {
- XX if (abs(pitch-lastpitch) > abs(pitch+OCTAVE_NOTES-lastpitch))
- XX {
- XX ++octave;
- XX pitch += OCTAVE_NOTES;
- XX }
- XX
- XX if (abs(pitch-lastpitch) > abs((pitch-OCTAVE_NOTES)-lastpitch))
- XX {
- XX --octave;
- XX pitch -= OCTAVE_NOTES;
- XX }
- XX }
- XX octprefix = FALSE;
- XX lastpitch = pitch;
- XX
- XX /* ...which may in turn be followed by an override time value */
- XX GETNUM(cp, timeval);
- XX if (timeval <= 0 || timeval > MIN_VALUE)
- XX timeval = value;
- XX
- XX /* ...and/or sustain dots */
- XX for (sustain = 0; cp[1] == '.'; cp++)
- XX {
- XX slen--;
- XX sustain++;
- XX }
- XX
- XX /* time to emit the actual tone */
- XX playtone(pitch, timeval, sustain);
- XX break;
- XX
- XX case 'O':
- XX if (cp[1] == 'N' || cp[1] == 'n')
- XX {
- XX octprefix = octtrack = FALSE;
- XX ++cp;
- XX slen--;
- XX }
- XX else if (cp[1] == 'L' || cp[1] == 'l')
- XX {
- XX octtrack = TRUE;
- XX ++cp;
- XX slen--;
- XX }
- XX else
- XX {
- XX GETNUM(cp, octave);
- XX if (octave >= sizeof(pitchtab) / OCTAVE_NOTES)
- XX octave = DFLT_OCTAVE;
- XX octprefix = TRUE;
- XX }
- XX break;
- XX
- XX case '>':
- XX if (octave < sizeof(pitchtab) / OCTAVE_NOTES - 1)
- XX octave++;
- XX octprefix = TRUE;
- XX break;
- XX
- XX case '<':
- XX if (octave > 0)
- XX octave--;
- XX octprefix = TRUE;
- XX break;
- XX
- XX case 'N':
- XX GETNUM(cp, pitch);
- XX for (sustain = 0; cp[1] == '.'; cp++)
- XX {
- XX slen--;
- XX sustain++;
- XX }
- XX playtone(pitch - 1, value, sustain);
- XX break;
- XX
- XX case 'L':
- XX GETNUM(cp, value);
- XX if (value <= 0 || value > MIN_VALUE)
- XX value = DFLT_VALUE;
- XX break;
- XX
- XX case 'P':
- XX case '~':
- XX /* this may be followed by an override time value */
- XX GETNUM(cp, timeval);
- XX if (timeval <= 0 || timeval > MIN_VALUE)
- XX timeval = value;
- XX for (sustain = 0; cp[1] == '.'; cp++)
- XX {
- XX slen--;
- XX sustain++;
- XX }
- XX playtone(-1, timeval, sustain);
- XX break;
- XX
- XX case 'T':
- XX GETNUM(cp, tempo);
- XX if (tempo < MIN_TEMPO || tempo > MAX_TEMPO)
- XX tempo = DFLT_TEMPO;
- XX whole = (HZ * SECS_PER_MIN * WHOLE_NOTE) / tempo;
- XX break;
- XX
- XX case 'M':
- XX if (cp[1] == 'N' || cp[1] == 'n')
- XX {
- XX fill = NORMAL;
- XX ++cp;
- XX slen--;
- XX }
- XX else if (cp[1] == 'L' || cp[1] == 'l')
- XX {
- XX fill = LEGATO;
- XX ++cp;
- XX slen--;
- XX }
- XX else if (cp[1] == 'S' || cp[1] == 's')
- XX {
- XX fill = STACCATO;
- XX ++cp;
- XX slen--;
- XX }
- XX break;
- XX }
- XX }
- XX}
- XEND-of-interp.c
- Xecho x - Files
- Xsed 's/^X//' >Files << 'END-of-Files'
- XX/usr/include/sys/spkr.h
- XEND-of-Files
- Xecho x - Install
- Xsed 's/^X//' >Install << 'END-of-Install'
- XX#
- XX# Speaker driver installation script
- XX#
- XXTMP=/tmp/speaker.err
- XXERR1=" Errors have been written to the file $TMP."
- XXERR2=" The Speaker Driver software was not installed."
- XX
- XXecho "Installing Speaker Driver Software Package"
- XX
- XX/etc/conf/bin/idcheck -p speaker 2>$TMP
- XXif [ $? != 0 ]
- XXthen
- XX echo "The speaker package is already at least partly installed.
- XX Removing the old version now..."
- XX /etc/conf/bin/idinstall -d speaker
- XXfi
- XX
- XX/etc/conf/bin/idinstall -a -k speaker 2>>$TMP
- XXif [ $? != 0 ]
- XXthen
- XX message "There was an error during package installation. $ERR1 $ERR2"
- XX exit 1
- XXfi
- XX
- XX/etc/conf/bin/idbuild 2>>$TMP
- XXif [ $? != 0 ]
- XXthen
- XX message "There was an error during kernel reconfiguration. $ERR1 $ERR2"
- XX exit 1
- XXfi
- XX
- XXrm -f $TMP
- XX
- XXcp spkr.h /usr/include/sys/spkr.h
- XX
- XXecho "Performing shutdown..."
- XXcd /; exec /etc/shutdown -g0 -y
- XEND-of-Install
- Xecho x - Master
- Xsed 's/^X//' >Master << 'END-of-Master'
- XXspeaker ocwi iocH spkr 0 0 1 1 -1
- XEND-of-Master
- Xecho x - Name
- Xsed 's/^X//' >Name << 'END-of-Name'
- XX386 UNIX Speaker Device Driver Package
- XEND-of-Name
- Xecho x - Node
- Xsed 's/^X//' >Node << 'END-of-Node'
- XXspeaker speaker c 0
- XEND-of-Node
- Xecho x - Remove
- Xsed 's/^X//' >Remove << 'END-of-Remove'
- XX#
- XX# Speaker driver remove script
- XX#
- XXTMP=/tmp/speaker.err
- XXRERR="Errors have been written to the file $TMP."
- XX
- XXecho "Removing Speaker Driver Software Package"
- XX
- XX/etc/conf/bin/idinstall -d speaker 2>$TMP
- XXif [ $? != 0 ]
- XXthen
- XX message "There was an error during package removal. $RERR"
- XX exit 1
- XXfi
- XX
- XX/etc/conf/bin/idbuild 2>>$TMP
- XXif [ $? != 0 ]
- XXthen
- XX message "There was an error during kernel reconfiguration. $RERR"
- XX exit 1
- XXfi
- XX
- XXrm -f /dev/speaker $TMP /usr/include/sys/spkr.h
- XX
- XXexit 0
- XEND-of-Remove
- Xecho x - Size
- Xsed 's/^X//' >Size << 'END-of-Size'
- XXROOT=1400
- XXUSR=100
- XEND-of-Size
- Xecho x - System
- Xsed 's/^X//' >System << 'END-of-System'
- XXspeaker Y 1 0 0 0 0 0 0 0
- XEND-of-System
- Xecho x - playtest
- Xsed 's/^X//' >playtest << 'END-of-playtest'
- XX:
- XX# Test script for the speaker driver
- XX#
- XX# v1.0 by Eric S. Raymond (Feb 1990)
- XX# modified for 386bsd by Andrew A. Chernov <ache@astral.msk.su>
- XX#
- XXreveille="t255l8c.f.afc~c.f.afc~c.f.afc.f.a..f.~c.f.afc~c.f.afc~c.f.afc~c.f.."
- XXcontact="<cd<a#~<a#>f"
- XXdance="t240<cfcfgagaa#b#>dc<a#a.~fg.gaa#.agagegc.~cfcfgagaa#b#>dc<a#a.~fg.gga.agfgfgf."
- XXloony="t255cf8f8edc<a.>~cf8f8edd#e.~ce8cdce8cd.<a>c8c8c#def8af8."
- XX
- XXcase $1 in
- XXreveille) echo $reveille >/dev/speaker;;
- XXcontact) echo $contact >/dev/speaker;;
- XXdance) echo $dance >/dev/speaker;;
- XXloony) echo $loony >/dev/speaker;;
- XX*)
- XX echo "No such tune. Available tunes are:"
- XX echo
- XX echo "reveille -- Reveille"
- XX echo "contact -- Contact theme from Close Encounters"
- XX echo "dance -- Lord of the Dance (aka Simple Gifts)"
- XX echo "loony -- Loony Toons theme"
- XX ;;
- XXesac
- XEND-of-playtest
- Xexit
- END_OF_FILE
- if test 28922 -ne `wc -c <'sys/unix/snd86unx.shr'`; then
- echo shar: \"'sys/unix/snd86unx.shr'\" unpacked with wrong size!
- fi
- # end of 'sys/unix/snd86unx.shr'
- echo shar: End of archive 17 \(of 18\).
- cp /dev/null ark17isdone
- MISSING=""
- for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked all 18 archives.
- echo "Now execute ./patchit3.sh"
- 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
-