home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / games / volume16 / nethck31 / part78 < prev    next >
Encoding:
Text File  |  1993-02-05  |  58.3 KB  |  1,490 lines

  1. Path: uunet!news.tek.com!master!saab!billr
  2. From: billr@saab.CNA.TEK.COM (Bill Randle)
  3. Newsgroups: comp.sources.games
  4. Subject: v16i086:  nethack31 - display oriented dungeons & dragons (Ver. 3.1), Part78/108
  5. Message-ID: <4449@master.CNA.TEK.COM>
  6. Date: 5 Feb 93 19:20:15 GMT
  7. Sender: news@master.CNA.TEK.COM
  8. Lines: 1478
  9. Approved: billr@saab.CNA.TEK.COM
  10. Xref: uunet comp.sources.games:1637
  11.  
  12. Submitted-by: izchak@linc.cis.upenn.edu (Izchak Miller)
  13. Posting-number: Volume 16, Issue 86
  14. Archive-name: nethack31/Part78
  15. Supersedes: nethack3p9: Volume 10, Issue 46-102
  16. Environment: Amiga, Atari, Mac, MS-DOS, OS2, Unix, VMS, X11
  17.  
  18.  
  19.  
  20. #! /bin/sh
  21. # This is a shell archive.  Remove anything before this line, then unpack
  22. # it by saving it into a file and typing "sh file".  To overwrite existing
  23. # files, type "sh file -c".  You can also feed this as standard input via
  24. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  25. # will see the following message at the end:
  26. #        "End of archive 78 (of 108)."
  27. # Contents:  sys/mac/NHrsrc.hqx sys/unix/snd86unx.shr sys/vms/lev_lex.h
  28. # Wrapped by billr@saab on Wed Jan 27 16:09:18 1993
  29. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  30. if test -f 'sys/mac/NHrsrc.hqx' -a "${1}" != "-c" ; then 
  31.   echo shar: Will not clobber existing file \"'sys/mac/NHrsrc.hqx'\"
  32. else
  33. echo shar: Extracting \"'sys/mac/NHrsrc.hqx'\" \(26186 characters\)
  34. sed "s/^X//" >'sys/mac/NHrsrc.hqx' <<'END_OF_FILE'
  35. X(This file must be converted with BinHex 4.0)
  36. X:$'jPG'KKBfXZFR0bB`"bFh*M8P0&4!%!!!!!!!!!5a*LUJ!!!!!"!!!!4GF!!%6
  37. XA!!!&1`!!!!!0!"!!,3!`S!)!U!!!!!!!&J!i!#F!iBJB8h4[$'jPG'KKBfXZFR0
  38. XbBb8#!!!!FR0bBe*6483"!2rrrrm!!(*cFQ058d9%!3$rrrrr!!!!!!!!!!!!!!!
  39. X!!!!!!!!!TiLmT`!!!!!!!%X5!!$)!6!!!3!!!!!!!!!!#lN!!!!!&3!!!!!!jJ&
  40. XF!!%!!!!!!!!!!!Zi!!!!!"8!8!"Z!2S"Z!!"!!!!!!!!!!!(e!!!!!!9!&!!EJ$
  41. Xk!EJ!!3!!!!!!!!!!"p-!!!!!&3"3!'i!qJ'i!!%!!!!!!!!!!!I5!!!!!"8!8!"
  42. XZ!2S"Z!!!!"`"#!!)!8S!m!!!!!!!!!!!!!!(6@9cFf&RC6J+!!!!(!%Z!!3"8J(
  43. X+!!!!!!!!!!!!!!C6G'&dGA0V1!S!!!!@!(`!fJ$i!BS!!!!!!3!!!!!!!%di#J!
  44. X!!"S![J!'!9!"-J!!!!!"!!!!!!!%5@jQEb!i#J!!!#)!+!!S!)`!SJ!!!!!"!!!
  45. X!!!!06R9XE#"AD@jNEhFJ)6J+!!!!2!j1G@eLCA)JEfBJDf9jFdp$6P3&+LSU+LT
  46. X-8e4$"dYPH@0[C'9)3PP8"%0SBA*$5%&5"5SU+LSU6&0843!!!#!!+!!S!8S"lJ!
  47. X!!!!!!!!!!!!,4(9ZCf9[EL"0BA!i#J!!!#!!+!!S!+`"c!!!!!!"!!!!!!!,4'P
  48. XKCfj[Fh4TBh-i#J!!!!-!!3!!!!!@!!%66@&M)%jPG%KKBfXJ5'9XF-N[2`!!!!i
  49. X!!JNMGQ9bFfP[EJd"2`!!!!i!"J&6!!*2B`*2F`!"83!!!#J!J!!!!!!!!!!!rrr
  50. Xrr`%8%N&LEh9d)%eKBb"1CA4)B@0Vb3!!!!!!!!!!A3#"!!!!!!!!!!$rrrrE"%C
  51. XTE'8*8f&fC5"(B@eP!&-!!!%Y!!!!!""%DA0`E'&j)%p`G'P[ER2*!%3!!!a6CA3
  52. XJ6h"dD@pZFmN!6`!!!5d!!!!!"&&eDA3!83!!!!!!!%J!JJ!!!!!!!!!!rrrrq`4
  53. X&C'Pd"&9ZC'm!@J!!!5d!!!!!!d0eG!"B!!!%3fp`H3"$!!!&8'&cG'8!9J!!"80
  54. XXC@&b!!!!!!!!!!%$!)-!!!!!!!!!!2rrrrm)4AKdC@jNC@333@4UGA0d)%PZGQ9
  55. XZG'pbH3!!!!!)3fpZGQ9bFf8!!!!!!d4TF!!!!!!+4QpbBf8J6'pMD`"'!!!%5R9
  56. XYF!!!!!!)6'p[G#"#EhJ!6!!!$de[ER0dCA)J3@*TE'PdH3"0!!!%6Q&YC3!!!!!
  57. X26fCQCA)J8f&MFQPQD@0P!!!!!!43FQ&j!!!!!!K5G@)J6'&YF!!!!!!$8fPd!!!
  58. X!!!Y8GA*Z)&9ZC'9KC!!!!!!'9@jdFQ&`!!!!!!a@CA*cD@pZ)%PZCQm!!!!!$PG
  59. XTEQ4[Gb"$E'9KER9`!!!!!!PADA"P)%CKBf8!!!!!!!!!!)3!%3JMB@4UGA0d$3B
  60. XMBfKKG!d&)f4TF!d()fC[FQ0P$3BMDR9YF!d')fa[Eh30#50YEfjcG'9b$3BMEQ&
  61. XYC3d()fpQCQ9b$3BMF(*KH3d&)h*eBJd&)h0TG!d')h4eFQi0##0eER4bBA!0#50
  62. XfCA*cD@pZ$3JMGfPZC'ph$3BMGfP`C3d!!!!2!!F"D3%5!4!!!43""!&!!!!!G`#
  63. X%!!!!!!!!!!$rrrr["%eTFf-*5@jfC@jdEh*j!%N!!!e5C@4bBAFJ8f0bC@9Z!&)
  64. X!!""3FQ9fD@peFb"0CA0cB@GP!&!!!!%Y!!!!!!K8C@aPF'pbG!"8!!!%5fPMD`"
  65. X,!!!09'pRCfaP)&"TBfYeF!!!!!!!!!!!J!!!$rm!!!!!$3$r%Im!!!!0d!m4(`!
  66. X!!!$G$a%4m!!!!!hI%4(`!!$r$phrmI!!!2rrrG!2!!!!m4%Ih3!!!!$a%4m0d!!
  67. X!!2%4(`$G!!!!$r%I!!h3!!!!rr!!!0d!!!!!!!!!$G!!!!!!!!!!h3!!!!!!!!!
  68. X0d!!!!!!!!!$3!!!!J!rrrrrrr`!!$mc-c-c2m!!2c-c-c-r2!!r-c-rrcrr`$mr
  69. Xmca(mc2!2crr2%4r-m!r-rrm4(mc`$mc2rrrrc2!2rrrrr-c-m!ra%Irrc-c`$r%
  70. X4r2rmc2!2ca(mcrr-m!r-rrc-rrc`$mc-c-c2rr!2c-c-c-crm!rrrrrrrrr`!!!
  71. X!3!F!6i"R`$IJ(q"2i2j!r`$jJ2M!I'!i-!!B!!`!"J!#"`"2J'I!0q!Ii%rJrN$
  72. Xr!2Q!q-"mB$J`!"J!$!!'!!)!!!"!Ir"!'%!83rjEiPhb6r*AmRq#Im*qiPpb6MT
  73. X!(N!1Irjrm(riIrarrRrqIrjrrRrqIrjrrRrqIrjrrRrqIrjrrJ!!!3!!!!!!!"m
  74. X!!!"r`!!JIq!!1$r`!"3rm!!52rJ!#6ri!!6rq!!#IrJ!!6ri!''Iq!$rc$!!rq3
  75. X!!2rb!!$rq3!!rq5!!2rL3!"ri5!!Iq#3!!!rm%J!(r!N!!I!%J!!!!N!!!!%J!!
  76. X!!N!!!!%J!!!!N!!!!!")!!!!*!!!!"3!!!!)!!!!!!!I!!!!Im!!)(rJ!$Jrm!!
  77. XF2r!!(Mri!!mrq!!(rrJ!!rri!!(rq!"KrrJ!rr``!2rm!!$rrJ!!rrm!!2rRJ!$
  78. Xrim!!Iq(J!(rJm!!rm(J!(r!m!!I!(J!!!!m!!!!(J!!!!m!!!!(J!!!!m!!!!(J
  79. X!!!!m!!!!(!!!!!J!!!%!(rrq!"!!!`!3!!+!%!!#3"!!!L!3!!)3%!2L#"!(qrJ
  80. X4Kr`)%82m#"%MrJJ3Nri)%%rq#"!RrJJ3%ri)%aQ-#"ImJ!JArN!)&rmJ#"ImN!!
  81. X)&ra)#"2m*!J6rK))%Ii*#""m")J3!!*)%!!"+"!!!*J3!!")%!!!+"!!!"JIrrr
  82. Xi(rrq!"rrr`!Irrq!(rrr`"rrrq!Irrr`(rrrq"rrrrJIrrri(rrrq"rrrrJIrrr
  83. Xi(rrrq"rrrrJIrrri(rrrq"rrrrJIrrri(rrrq"rrrrJIrrri(rrrq"rrrrJIrrr
  84. Xi(rrrq"rrrrJIrrri(rrrq"rrrrJIrrri(rrrq"rrrrJ!!!)!!!!!!!!!!!!!!!!
  85. X!!!!!!!!!!!!!$rrr!!!!!!!!!!!!!!!!$r%4%Im!!!!!!!!!!2!!!!m4%4%4m!!
  86. X!!!!!!!$rm!!!m4%4%4m!!!!!!!!!$pm!!2%4%4%I!!!!!!!!!!rGm!$a%4%4%I!
  87. X!!!!!!!!!rGm!m4%4%4(`!!!!!!!!!!rGrr%4%4%4m!!!!!!!!!!!rGm4%4%4%I!
  88. X!!!!!!!!!!!rGm4%4%4(`!!!!!!!2m!!2rGmIrrm4m!!!!!!!m4rrm4rGr`!!r`!
  89. X!!!!!!2%4%4%4rGm!!!!!!!!!!!$a%4%4%4rGm!!!!!!!!!!!m4%4%4%IrGm!!!!
  90. X!!!!!!2%4%4%4m!rGm!!!!!!!!!$a%4%4%I!!rGm!!!!!!!!!$a%4%4(`!!rGm!!
  91. X!!!!!!!m4%4%4m!!!rGm!!!!!!!!!m4%4%4m!!!rGm!!!!!!!!!ra%4(r!!!!rGm
  92. X!!!!!!!!!$rrr!!!!!!rGm!!!!!!!!!!!!!!!!!!!rGm!!!!!!!!!!!!!!!!!!!r
  93. XGm!!!!!!!!!!!!!!!!!!!rGm!!!!!!!!!!!!!!!!!!!rGm!!!!!!!!!!!!!!!!!!
  94. X!rGm!!!!!!!!!!!!!!!!!!!rGm!!!!!!!!!!!!!!!!!!!rGm!!!!!!!!!!!!!!!!
  95. X!!!rI!!!!!!!!!!!!!!!!!!!!m!!!!!)!!!rrrrrrrrrrrrr`!!!!!!!2c-c-c-c
  96. X-c-c-r`!!!!!!$mc-c-c-c-c-c2c`!!!!!!r-c-c-c-c-c-cmc`!!!!!2c-c-c-c
  97. X-c-c-r-c`!!!!$mc-c-c-c-c-c2c-c`!!!!r-c-c-c2rrr-cmc-c`!!!2c-c-c-m
  98. X4%4rmrrrrm!!!$mc2r-c2%4%4rmc-c2!!!!r-cmr-c2%4%4r-c-c`!!!2c-r-r-c
  99. Xa%4%4r-c-m!!!$mc-r-r-m4%4%Ic-c2!!!!r-c-r-rr%4%4(mc-c`!!!2c-c-r-m
  100. X4%4%4r-c-m!!!$mc-c-r-mIrrrrc-c2!!!!r-rmc2r-rmc2r-c-c`!!!2crrrrar
  101. X-r-c-c-c-m!!!$mm4%4%4r-r-c-c-c2!!!!r2%4%4(rr-r-c-c-c`!!!2ca%4%4r
  102. X-r-r-c-c-m!!!$mm4%4%Ic-r-r-c-c2!!!!r-m4%4(mc-r-r-c-c`!!!2c2%4%4r
  103. Xmc-r-r-c-m!!!$mc2m4%Ir-c-r-r-c2!!!!r-c-rrrmc-c-r-r-c`!!!2c-c-c-c
  104. X-c-c-r-r-m!!!$mc-c-c-c-c-c-r-r2!!!!r-c-c-c-c-c-c-r-r`!!!2c-c-c-c
  105. X-c-c-c-r-m!!!$mc-c-c-c-c-c-c-r2!!!!r-c-c-c-c-c-c-c-r`!!!2rrrrrrr
  106. Xrrrrrrrrrm!!!!!!-!&S!EJ$Z!C)!J84%!!!!6!!#!!!!!!"i!-B!LJ%3"!*25`!
  107. X!!!!!#J"'!(-"%)JF3fpeE'3JEQpd)&ib)'*PBf&eFf8JAM!Z)#"H-3!!!!!!#J!
  108. X8!#S!0+!#!!!!!!%!!!!!!!!!!!!rrrr`)!!!'#!(`"JJ$r!B)`ri'#+(q"JL4r`
  109. XB)5Im'##Ir"JJ6r`B)#Im'#Bc'"J[q3!B,rb!'#rq3"J[q5!B,rL3!"JRq%JB*r`
  110. XN'#2m%KJJq!NB)!!%Q#!!!PJJ!!%i)!!!Q#!!!&JJ!!!i2rrrq"rrrrJ!!!!!!!!
  111. X!!!!!!!!rrrr`2rrrq$rrrrJrrrri2rrrq$rrrrJrrrri2rrrq$rrrrJrrrri2rr
  112. Xrq$rrrrJrrrri2rrrq$rrrrJrrrri2rrrq$rrrrJrrrri2rrrq$rrrrJrrrri2rr
  113. Xrq$rrrrJrrrri2rrrq$rrrrJrrrri(rrrq!!!!!!!!!"!!!"rr%1'@mCIjNrQGqC
  114. XrKRr'IZCHGNiq3"j!$Rrq2ri!!(rmIrjrrRrqIrjrrRrqIrjrrRrqIrjrrRrqIri
  115. XrrJ!!!J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$rrrrrrrrrrrr
  116. Xrrrrr!!!!r-c-c-c-c-c-c-c-cr!!!2c-c-c-crrrc-c-c-r`!!$mc-c-c2%4%Ir
  117. X-c-c2m!!!r-crc-ca%4%4r-c-cr!!!2c-rIc-ca%4%Ic-c-r`!!$mc2hIc-m4%4%
  118. XIc-c2m!!!r-c2hIc2%4%4(mc-cr!!!2c-c2hIm4%4%4r-c-r`!!$mc-c2hI%4%4%
  119. XIc-c2m!!!r-c-c2hI%Ira(mc-cr!!!2c2r-crhIr-crc-c-r`!!$mm4rr%IhIc-c
  120. X-c-c2m!!!r2%4%4%IhIc-c-c-cr!!!2ca%4%4(rhIc-c-c-r`!!$mm4%4%Ic2hIc
  121. X-c-c2m!!!r2%4%4(mc2hIc-c-cr!!!2c2%4%4r-c2hIc-c-r`!!$mca%4%4r-c2h
  122. XIc-c2m!!!r-cr%4%Ic-c2hIc-cr!!!2c-c2rrr-c-c2hIc-r`!!$mc-c-c-c-c-c
  123. X2hIc2m!!!r-c-c-c-c-c-c2hIcr!!!2c-c-c-c-c-c-c2hIr`!!$mc-c-c-c-c-c
  124. X-c2hIm!!!r-c-c-c-c-c-c-c2hr!!!2c-c-c-c-c-c-c-c2r`!!$rrrrrrrrrrrr
  125. Xrrrrrm!!!$rrrrrrrrrrrrrrrrr!!!!!!!!!!!!!!!!!!!!!!!!!!!!`!0J#+!)N
  126. X#'`#!4%3!!!!L!!%!!!!!!$3"53")!B-%!Np,!!!!!!!'!$J!4J%fL!*H-!!!!"J
  127. X!@J"H!1J"T`!&!!!!!!!!!!!!JJ!"F!S!!!!B!$)!-J$p!@%!"3!!!!!!!!!!!)-
  128. X!,A!+!!!!'!")!()!pJ&r!!8"!!%!!!!!!!#%!#G`#J!!!"J!3J"F!--"e`!&!!!
  129. X!!!!!!!!!K`!!F!S!!!!B!%)!A!$$!GF!"3!!!!!!!!!!!)B!!(!+!!!!'!"#!&`
  130. X!``(A!!8!!!!!!!!!!!#&!!"`#J!!!&)!"!!!!!!!B`%Y!(F"C`3$@@9c!!!!!!!
  131. X!B`$R!(F")33#6Qm!!!!!!!X!6!"8!@D)!Pi`!!!!!!!-!"3!,!!dS!)!!3!!!!!
  132. X!A3%S!(d"5)!!!!!!C!!&!!!!!!"M!5d!G`&R"!0CCA-!!!!!!!"M!1F!G`%K"!*
  133. X1E`!!!!!!B`#K!(F!f`3%8A9TG!!!!!!!#`"-!&3"CSJ#AM!!!!!!!!`!&!!X!$5
  134. XJ!J!"!!!!!!"G!5J!I3&)J!!!!!"f!!B!!!!!!'-",3"h!@F%!ePPF`!!!!!!!'-
  135. X!j`"h!5%%!Nj[!!!!!!"M!+%!G`$E"!0"E'`!!!!!!!"M!&X!G`#9"!44G@Pd!!!
  136. X!!!!,!%`!9!&QL!*H-!!!!!!!$!!8!#`!0+!#!!%!!!!!!&m"+3"r!8Q!!!!!!"J
  137. X!3J"F!--"e`!&!!!!!!!!!!!!L!!!F!S!!!#%!!F!!!!!!'-",3"h!@F%!ePPF`!
  138. X!!!!!!'-!j`"h!5%%!Nj[!!!!!!"M!+%!G`$EN!!!!!!!!!"M!&X!G`#9"!0"E'a
  139. Xd!!!!!!"M!"8!G`"2"!44G@Pd!!!!!!!,!%`!9!&QL!*H-!!!!!!!$!!8!#`!0+!
  140. X#!!%!!!!!!&i"+!"q!8L!!!!!!')!"3!!!!!!DJ$j!(i"-`3#6dX!!!!!!'S!T3"
  141. Xq!0m%"N0KEQ0PE!!!!!!!#J"9!$S"1iJ#AM!!!!!!!%3!9`"8!6B3!!!!!!!!#J!
  142. XF!#S!2+!#!!%!!!!!!'3!p!#%!45!!!!!!AJ!%`!!!!!!U`$M!,m"(33#6dX!!!!
  143. X!!+X!QJ#r!03%"N0KEQ0PE!!!!!!!$!!B!"i!N!!'"N&NDR9cG!!!!!!!(J!B!$!
  144. X!N!!'"%0SBA3!!!!!!$!!'!"#!*!!"J0%DA!!!!!!!!"#!"J!9!#3!!B&4QpbBf8
  145. X!!!!!!!"8!"J!CJ#3!!B%5R9YF!!!!!!!CJ!B!(J!N!!'"%a[Eh3!!!!!!(J!'!#
  146. X+!*!!"JG0EfjcG'9b!!!!!!!!LJ!B!*`!N!!'"%jKE@8!!!!!!*`!'!#Z!*!!"J9
  147. X2CQCPFJ!!!!!!!!`!QJ!H!4)'"&"bBAN!!!!!!"i!QJ!`!4)'!e*eBJ!!!!!!!$!
  148. X!QJ"#!4)'!e0TG!!!!!!!!%)!QJ"8!4)'"&4eFQi!!!!!!&3!QJ"Q!4)'"P9ZG(*
  149. XKF!!!!!!!CJ#D!(J"%JB(9Q9bFfP[EJ!!!!!!!(J!QJ#+!4)'"PGTEQ4[G`!!!!!
  150. X!LJ#D!*`"%JB%9fP`C3!!!!!!TJ$I!-B!ri!!!!!"-J!1!!!!!!#0!+J!S3$L"!*
  151. X25`!!!!!!M3!a!+%!D`3%8A9TG!!!!!!!$J!9!#!!I`B-3A*MD'9[E'pRDA0d!!!
  152. X!!!!J!"8!-J"r"JP#BA*LBA*TB@i!!!!!!!!b!"8!4!"r"JG$BACPE@&Z!!!!!!!
  153. X!4!!9!&B!I`B$4@aQ!!!!!!!!9J!9!'J!I`B'5'9KE'9b!!!!!!"S!"8!HJ"r"JC
  154. X,EQPRD(3!!!!!!!i!M3!J!2F'"P"bD@9cG!!!!!!!)!#0!$)!p`B&8QpRG@8!!!!
  155. X!!!!b!)d!4!$h"JG6B@eeFQ&T!!!!!!!!4!#0!&B!p`B(9'peFQPcG!!!!!!!!&B
  156. X!M3"S!2F'#&CKE'YjFQPP!!!!!!"S!)d!HJ$h"JCADATKFQ3!!!!!!)J!T!#S!-5
  157. X!!!!!!"J![!#D!4X"F`!&!!!!!!!!!!!!L3!!D!S!!!"X!!8!!!!!!%)!63"@!)F
  158. X%!Np,!!!!!!"#!!X!9J"&"!C$B@jMC@`!!!!!!!F!0!!h!05)!Pi`!!!!!!"%!*J
  159. X!9!$-%!P&C'Pd)&4PH(3!!!!!!!!)!!S!+!!US!)!!3!!!!!!23"*!&d!DB!!!!!
  160. X!J!!!!!!!!!!!$rrrrrrrr`!2c-crr-c2m!r2r2%Ic-r`$mrrm4(mcr!2c2ra%Ic
  161. X2m!rrrrrrr-r`$r%4rrc-cr!2%4(rrmc2m!ra%Icrr-r`$mm4r-rrcr!2c2rmc2r
  162. Xrm!r-c-c-crr`$mc-c-c-rr!2rrrrrrrrm!$rrrrrrrr`!!!*L*!!!!!!!2i!"J!
  163. X!rrF!"J!,!lX!#3!#!!!!2`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  164. X!!!!!!!!!!!!!!!!!!!!!!!!!!0J!!!!!!!!833!!!!!!+8!!!$!!!"S!!!)B3!9
  165. XV@)P!"q!j4##!3!59`(!F!F)8!"8!&##2`2r`!IJ!!!"cJ#!!!!!!!#!!!!jJ!3!
  166. X3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
  167. X`!&#)!KJ%!3+!SJ!%!JL!!!"J!%%L%f`!!!)SJ!!"q)P!"D!T4##!3!593&!8!8)
  168. X8!"8!&##2`2r`$3J!!!!N3&!#mm!!"#!$!!Q3!!E91Ha-)!!&bj`[Zqj`!!jc[1p
  169. XrlSm-B4Llc[1r'-BaraS#"!!3'#%``!!!!!)!!!!!UDlj&+%N#P#YA1q"kP%846S
  170. XJP(a#4#@Ll%!#55!&DeL*3!@J+83JJ%!%P8"3&!&#&!!9!"3JMm$rm"-!2J!fG&a
  171. X!"I`J%KSJ")!*)26IeV+5U3!'2'*S3$'))*'-BaM#%BS-SEc'-Ba*'-94$3d""!!
  172. X3)#!33!!!!!)!!!!!UY(i!!!B!!!!)aJ#J!!!!%BNJU*!!!!c-J!#UJ!!!IL*3!@
  173. XJ+83JJ%!%P8"3&!&#&!!9!"3JMm$rm#-!%J!*V')J2I`rN5SN$,Jj3*@&8Y3KF3!
  174. X+D%+[H$'0Ad(XB`M#%)S0)9V'-B`*'-54&)J!IjchFrdbI@GjpRr'0BaqU""6R[H
  175. XpcR15BaJkMR1M'-BZjq,RcSfV-N!"9@!&DeMj3IfrkA`JJ%!%pArIprprPIJ9q"A
  176. XiMm$rpf8(b2b)Vq,Ybr`JI-JJFh`TrTH2Z8JKVmq+U)dJa%k)J#+[r3MldrS1)4R
  177. X(dI1*'-5+*)J!M'-BT'-dDjM'1B*'094&"""8BaM'-Ba5IrpAdBaM'-BeJ6a)dBj
  178. XQl)rq'@Q3!!(rMhiaXBr(rrrrrjFc$$--)(i(rbIq*rrrrrLP!S88L+aM'X[m2j%
  179. XS2iKm3!k3!)89Y5%K!"-T!r$%NAKI424M#-)4LSdK'-B4L%NBe)4%5!#-B4qNBca
  180. XV'-B`FNBe*%LS%(IM'-BIrp*M'(k4M'-BaM5(j%M4M')"#!3KmNeV@2P,rEhi2%!
  181. X#3!6eprphrhq"q8(p&IK2rr`)S`+*&)KdBah6r#!5'#"`Id!1N!!!9V)5!3!5+L)
  182. XSa*%)))#%BaM#%BU-S4M'%Ba*&@e%K%J!R'%B*'-bDaM'-!T09943U"%N*cR1%)3
  183. X5BaK5NBaR1-BeL5j*dCaMraJ%3(*)!IL*5L@P!!"!!N!%P"3"9!&!!#&!*43J6rr
  184. Xm#+-#Na5)*&838r`rJ!JNJ$L!!*!!J$T0$!!3BFrF*cL1G3!%G(c[IJk2G(mBZJk
  185. X,L1*'*2iir'qHpk2M-@XAHI$aY)U,rUJ1)pV@YHpldQ-IhZjcQYHjc[%N4XjXBJ$
  186. XJ!("TP@YBL8SPT3!!3!*!"*38!93"3!!K3#88)%rrr!GY!VlR5(1fi$hm)(rj)!!
  187. X!J!$`!"!!!!!3)!!!!!!!!3!!!!!!!!!!!!!!!!%!!!!!!!!J!!!!!!"!)!!!3#!
  188. X!!!!!3(!#F!!!!)!!!!!!!!!!!!#!"!!'3!!!!!!!!!!!!!(iL8SPT3!!3!*!"*3
  189. X8!93"3!!K3#88)%rrr!!J!!!%!!!!!#(ri!!*)!!!!!!!!!!!!!!J!!!!!!!!!J!
  190. X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1!`!!!3#!!!!!$J!!%!!!!!3!!!!!!!!!
  191. X!!!F!!!!"J!!!!!!!!!!!"@YBL8SRj`!!3!*!"*3F!G`"`!!K3#88)%rrr!!!!!!
  192. X%!!!!!%!!!!!)`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  193. X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!3!%!!N!$J!6!"J
  194. X!'J!G!#!!*3!U!#`!-3!b!$B!1`!p!%)!4`"-!&%!9J"E!'!!C3"Q!'J!D`"`!(-
  195. X!H!"p!))!K`#-!*%!PJ#E!+!!T3#S!+d!XJ#h!,`!`3$'!-X!d!$9!0S!h`$N!1N
  196. X!lJ$c!2J!r3$r!3-""3%)!3i"%!%9!4S"(`%N!5N",3%b!6F"1!%l!8!"3J&(!8`
  197. X"83&@!9X"B!&P!@N"EJ&c!AJ"I3'#!BF"LJ',!Bi"N`'6!CJ"R3'L!DF"V!'a!EB
  198. X"Z`(!!F8"bJ(0!G!"dJ(A!G`"i3(Q!HX"m!(e!IS"r`)%!JN#$J)6!KJ#(3)L!LF
  199. X#,!)a!M-#1!)p!N)#4`*,!Nm#9!*C!Pi#C!*U!QX#F!*e!RS#I`+%!S8#L3+0!T)
  200. X#P`+E!U!#S`+S!Ud#XJ+f!VS#[3,$!XN#c!,5!YJ#f`,I!Z-#j`,Y![-#p`,p!`-
  201. X$#3-2!a8$'`-I!b)$*3-T!bm$03-j!c`$3J0)!dX$6J08!eS$A`0P!fS$E`0e!hS
  202. X$J!1&!iS$M`18!jN$R`1P!kX$X31f!lN$[!1r!m-$b!20!p%$eJ2A!p`$i!2N!qF
  203. X$l3!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B
  204. X!"J!'!!B!"J!'!!B!"J!'!!B'"J)'!3B!"J!'!!B!"J)'!3B#"J!'!!B""J!'!JB
  205. X""J!'!JB!"J!'!!B!"J!'!!B!"J!'!JB""J%'!!B""J!'!!B!"J!'!!B!"J!'!!B
  206. X!"J!'!3B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!JB""J)'!3B
  207. X!"J%'!!B!"J!'!!B!"J%'!!B!"J)'!!B!"J%'!!B!"J!'!!B!"J!'!!B""J!'!!B
  208. X!"J!'!!B!"J)'!JB""J!'!!!!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!3B""J%'!!B
  209. X!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B#"J!'!!B!"J!'!3B
  210. X""J!'!!B!"J!'!!B$"J!'!!B!"J!'!!B$"J!'!!B!"J!'!!B!"J)'!!B!"J!'!!B
  211. X!"J-'!!B!"J-'!!B!"J-'!JB#"J)'!!B!"J)'!!B!"J!'!!B!"J!'!JB$"J-'!JB
  212. X!"J!'!!B$"J!'!!B!"J-'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B
  213. X!"J!'!!B""J%'!`B!"J!'!!B""J!'!JB!"J!'!!B""J!'rrm!!![HN!!!!!!!r`!
  214. X(!!$rr3!(!!m%j3!-!!-!!!"#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  215. X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1!!!!!!!!!!!!!!!!!D!!!!
  216. X!!!"9UeBL8!(i$P%)%!)!#)T`"`"`!F%&!!#N!!S)%2i$rrJ!!!!!!!!!!!!!!!!
  217. X!)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  218. X!!!!!!!!!!!!!!!!!!!!!!!!&4%!!!!!!#P!!!!`!!!X!!!!JJ!!!!IiL8!&S#P%
  219. X)%!)!#)T3"3"3!8%&!!#N!!S)%2i$rrJ!!!!!!!!!!!!$`!!!)!!!#Q!!!"!!$!!
  220. X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"`F!!!!!!!!!!!!!!!!!!!!!!F!!!
  221. X!!!B!!!!!4)!!!!!!!!!!!"!!!!!!!!!JJ!"9UeBL8!&S#P%)%!)!#)T3"3"3!8%
  222. X&!!#N!!S)%2i$rrJ!!!!!!$J!'!$d)!!!)!!!$C!!!08j,&)J!!,PcKI0pcJ!!F!
  223. Xlc[Iqk2$'%BZmlc[aM'-Ib")!J3!%"JK-!!!!!!!!!!!!+QZ!)J#*!3#!Tc[JH`#
  224. X#)!k)$4m35)6B[F3!)SS!!!(q)P!"D!T4#"!#!!L+8!8!8!&""3!!T!!+#"$q!rr
  225. Xi$[Jq!!!4cL!"r#!!)#!$!$NJIGr@XP+S!!-H-633'-3))L"'-B`K'+$+'iaM'-5
  226. X4M'-3b"8!33!%#!K--!!!!!#!!!!!+V4845K*!T4,@-B!T*4&%9')%+L3!*%*D-B
  227. XN!#55!&@V9L*3!@J+83J3!J!)LP!&!&!"338!!+3!#JJ3rJ2rq"&))J!ENM%J"I`
  228. XJ"%`J")!T6d698Y*KF3!&&#&8)"M%%"![4M'-)3LJdKA-BaM!NBaM%-3BJ!%!"!J
  229. X)""!!!!!!J!!!!#S%3!!!"J!!!!M'!+!!!!!4L4(iN!!!!!c')!!))!!!!IiL8!&
  230. XS#P%)%!)!#)T3"3"3!8%&!!#N!!S)%2i$rrYa3"!!*$Sa%!Am2b+5*!5!+Ip%K6(
  231. X8)A%!"63QPl`R4UI)8-I3M#%)S1)4V'-B`*'-94&%%!!IjchFrdbIHGjpRG'0Baq
  232. XU"#,R[HpcR15BaJkMR1M'-BZ3!%Ljmk0UaL3!&NTD9DY@2P"rErTI#"!#!!MkArh
  233. Xrhrprj6q!TrJ+Ia$q!rrmNNI)r%4'-AJGr#!K8L",1#!24)qBL#'[`!P83IKL5-E
  234. X!"*Eq-)qp2k$#%Cap(cL4M%LL3K!!)aM'+4M0'XBaMQ+4M984533M'-BaM'-8Q-I
  235. X9r'-BaM'0HIm50'1C[F6rkCUP!!(ripq-E'2arrrrrrq,aM"JaJ`3(m"rr%IrL2r
  236. XrrrrmNN+&*%4(mBlVr$rk-$q`I#!24)899#%K$iQ8J4"L5,`Rb*E'-)`K'+$L%Ba
  237. XK')54M&4%3K!!)aK(k4M1'XBaM&b4M8N5+J3Mq-BaKrrdRriAT'-BaM'0%%J50'-
  238. XBJ!L!35Y#eDY@2P,rEhi2%!!L!!MkI[rlhrpri$q8"rd+I`Mrrr`$F8+**%4'-Be
  239. XVr#!N%5")IL!24!!9XU%"!"%9!4"L5)33%"I'-)`K'+M5%BaK')54M@*)34!!)aK
  240. X'#4M0'XBaM!+4M8N8+J3M#-BaK#%%Q-B8T'-BaM'0%NN50'-Brr#!3Rp#J!(q)P+
  241. X*D8!!%!!L!!L+!S!+8!&!!!38!%8+#!Mrrr`!%8+4*%4'+SlVr$mJm55`ID!24)"
  242. X@X4)!%&%@%44L5)U))*!!4M'-)4LSbK'-B4M%N9EL5%%3!#FBaLNBc*V'-B`LNe9
  243. X9'#S%CaR1FiaK&*M'&D4M'FiaM9*,NR4R')!4!!3+T9@V9L*5L@P!!"!!)J!)LJ+
  244. X!#P!"3!!%&!"&#JJ)rrrm!"&#Sb6%1LU)+r`J"a$!!$KJ!%5!1Nk5!""Jjqi6R%F
  245. XbJ!#24mlhi1Mh4r',S1LiML4L6m#3!(mEjch)q-aDaGjm('dLS[qU!jVQYDecRZ5
  246. XBaqklR1DelR1m54'cQaL!$J!2#PS!!IiL8SPT3!!3!#)!#)S#J!T3!8!!""3!43S
  247. X)#2rrr!!@3Vl(3K(EF"hri2J3!!!!)!"p!"!!$!!3)!!!!!!!!)!!!!!!!!!!!!!
  248. X!!!"!!!!!!!"`m!!!!!!!%!J!!"!)!!!!!"!F!3!!!!!J!!!!!!!!!!!!)!%!!4!
  249. X!!!!!!!!!!!"9UeBL8SPT3!!3!#)!#)S#J!T3!8!!""3!43S)#2rrr!!3!!!%!"!
  250. X!!"(i!!!3!!!!!!!!!!!!!!!J!!!!!!!!!3!!!!!!!!!!!!!!!!!J!!!!!!!!!!!
  251. X!!!!"%!J!!"!)!!!!!4!!!3!!!!!J!!!!!!!!!!!!)!!!!H!!!!!!!!!!!!!!!Ii
  252. XL8SPT3!!3!#)!#)S#J!T3!8!!""3!43S)#2rrr!!!!!!%!$J!!"!!!!!3!!!!!!!
  253. X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!i$!!!!!!!!!
  254. X!!1!!!J!!!!"!!!!!!!!!!!!"`!!!!!!!!!!!!!!!!!"9UeBL8SRj`!!3!#)!#)S
  255. X$J!j`!F!!""3!43S)#2rrr!!!!!!!!!!!!!!!!!!3!!!!!!!!!!!!!!!!!!!!!!!
  256. X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  257. X!!!!!!!!!!!!!!3!%!!N!$J!6!"N!'J!G!#!!*3!U!#`!-3!b!$F!2!!q!%-!5!"
  258. X0!&)!9`"F!'%!CJ"R!'N!E3"b!(B!H`#"!)B!L`#3!!#9!*S!R`#N!+N!V!#a!,B
  259. X!Z`$!!-8!bJ$2!03!f3$H!1-!k!$Y!2)!p`$m!3%""!%*!3`"%3%B!4S"(`%N!5N
  260. X",J%c!6F"2!&"!8)"43&+!8`"83&@!9X"B!&P!@S"E`&c!AJ"I3'#!BF"M!'4!C3
  261. X"P3'B!Cd"R3'L!DF"V!'a!EB"Z`(!!F8"bJ(2!G3"e`(D!G`"i3(Q!HX"m!(e!IS
  262. X"r`)%!JN#$J)6!KJ#(3)L!LF#,!)a!MB#1`)p!N)#4`*-!P%#9J*E!Q!#C3*U!R!
  263. X#GJ*h!R`#J3+)!Sm#PJ+A!TX#R`+N!UN#V3+b!V8#ZJ+r!X3#b!,-!Y!#e`,H!Z)
  264. X#k3,`![3#q3,q!`-$#J-4!aB$(3-N!bX$-J-j!d!$430*!dd$8J0C!f!$C!0S!fm
  265. X$GJ0k!hi$K31,!j!!!j8$QJ1I!k8$UJ1a!lB$Z`2!!m8$bJ22!p8$f`2J!q8$k!2
  266. XV!qm$m`2i!rd%!33'"!F%$!33""3%'!3B""m!"`!(!!F!"`!(!!F!"`!(!!F!"`!
  267. X(!!F!"`!(!!F!"`!(!!F!"`!(!!F!"`!(!!F!"`!(!!F!"`!(!!F!"`!(!!F$"`)
  268. X(!3F""`%(!!F$"`)(!JF""`%(!JF""`-(!3F""`)(!3F""`%(!3F""`%(!3F""`-
  269. X(!JF""`%(!JF""`!(!3F""`%(!3F""`%(!3F""`)(!3F""`%(!3F""`%(!3F""`%
  270. X(!3F""`%(!3F""`%(!3F""`)(!3F#"`%(!!F$"`%(!3F""`%(!3F#"`%(!3F$"`%
  271. X(!3F#"`%(!3F""`%(!3F""`%(!3F""`%(!3F""`%(!3F#"`-(!JF""`!!!3F""`%
  272. X(!3F""`%(!3F""`%(!3F""`)(!JF#"`%(!3F""`%(!3F""`%(!3F""`%(!3F""`%
  273. X(!3F""`%(!3F""`%(!`F""`%(!3F""`%(!3F""`%(!3F""`%(!`F""`%(!!F!"`!
  274. X(!`F!"`!(!!F!"`!(!!F#"`!(!!F!"`!(!!F$"`!(!!F$"`!(!!F$"`)(!JF#"`!
  275. X(!!F#"`!(!!F!"`!(!!F!"`)(!`F$"`)(!!F!"`!(!`F!"`!(!!F$"`!(!3F""`%
  276. X(!3F""`%(!3F!"`%(!3F""`%(!3F""`%(!3F""`%(!JF#"`-(!!F""`%(!3F""`-
  277. X(!3F!"`!(!3F!!3!(rrm!!!"#!2!!P`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  278. X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!3!"!!N!!%Z*!!`!!%Z-!!!!&J!+@APEDea
  279. Xe9QKAEeKX8f*8DP9Z8L`!!!!@!!TC@9Y,A&9@5&G[@%a63P4+98j5,!!!!%*J!!#
  280. XB!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  281. X"!!%!#3!!1!N!$!!!1!`!!!M#N!!!!!!!l`!+!!$rpJ!+!!`$C`!+!!)!!!!d!!!
  282. X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
  283. X!63!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(i(!!!!!!!!!F"`(!(!!!!!
  284. X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  285. X!!!!!!!!!9%#@8S!!!B!!!!!!!!!!!!!!!!!!!!!!!!!#S!!!!!!@J8!!!!!!J!"
  286. X3&!8!8!!!!!!!!!!!!!83!-$!!!#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"aJ!
  287. X!!!!!!!!!!!!!!!!!!i!$J!!!#3J@3*%"N!"54!8N3%`!1!!"iH!!!!!!!!!!!!!
  288. X@J8i!!!!0!!"3&!8!8!!"98!!!!mm!0qjr58P!!#jGmAcIFi!!Bi6cZIlS`aL$Ph
  289. XRHGq-B-Br3S##!%$#%aJ!!!!%!!!!"8dK(IPd8*9TJ3UQED3UQN+TmN0%$h)5&iY
  290. X!2RDJ!)JcrjEj83!!S!N!!&H8"3"3!!+@3#*!(m2ie9C*4K)3!8H)M33'-33584)
  291. XaP%4M$+-HBaM'*)aJaL-M3%)!33)"#!!!!!3!!!!&9L%M'Ba!!!!!!!!!!!!!!!"
  292. X5j%(9MFc+h!43L!3N9)NTGXpJJ$3!%35!A2B&JGJ!!UU)8!qI``L2dP##(j!!!88
  293. X*&HJ+-D[SCUS`M%3M$5+YBaM'")a9+88L!"ZCfjqh,fjZHhmaJaRe3(+K&BaGhGh
  294. XCQC[fjQCQQCP09$[eM5d+U$j3QU4#r*5*4ZaJ[NLJ%lL%cF2mr`YJ!!!!LM"I``L
  295. X&1EP5%Rcb441N(`R2%!5UUp#2G2m1)NeMk2R%LT83L4)!"QCP*P0-QCQFK5T8U5J
  296. XJFU(9M'CQCQCQC9+CQCQCQ8&14r@ec3U)#2bS(i%NT%PfVq$*@6qK48PpI`h$h*!
  297. X!!!!r"M$r``L!&'BL&4!#45"q'*)K#qNUrM#-4'10)JcM#0!NLSSSN4)!(Q*p*P1
  298. X-QCQBC5T8589!rq%6M'CQCQ2rr9+CQCQCQ3&81qq0,-J!2T!!bU4#r+5*&UJ46fS
  299. XLS6P5"3(GIP6rr!!!LM"r``J!9+C5%"!%484&'*)L""!R4M'84'1-SJcM#XSNL3T
  300. X%N3S!*QCK*P0-QCQB&53SUB9!M'-6M'CQCQBL)9+CQCQCQ3$NKF@+%K!!%4#)"#3
  301. XNT5N@U!T)5Q*"3LN&!&8!9)!!!!K5,jr$#)!j'BNJ!3`jqi6R%FbJ!4"(cZI$Sh4
  302. Xq$&d(4F4a#N5I#MmIQGNH8bbCERMLj#NAp8#-AI&cRGhGfGQG8TCQCRGh!%p%"E(
  303. XKi!!"(h+rrbGEk4Di'ckaS%%$j)F!93"6i!!!!#(SRm2i!"!!!-!"!!!!!!!!!#!
  304. X!$J!!!!!!!!!!!!%!!!!!!!''!!!!!!3#!!!)%!!!!!%$J!!)!!!!!!!)!!!!!!!
  305. X!!!!!!$J!!!!!!!!!!!!!"!!!(i!!!!!!!3!!!!"A!(!!!!!!!#!IrJ!!!!!!!!)
  306. X!!!!!!!!!3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'!`!!!J3!!!!"J!!!"!!!!!
  307. X!!"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%!!!!!!!!!!!#!!!!!(!!!!!!!!!"`!!
  308. X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  309. X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%!"!!*!!i!&J!G!"i!)3!N!#N!,J!`!$3
  310. X!03!j!$i!3!"&!%S!6`"8!&N!AJ"M!'J!D3"V!'i!F`"f!(S!J3#'!)X!N!!!P3#
  311. XC!*d!SJ#R!+J!V3#b!,B![3$#!-F!c!$4!0B!f`$J!18!kJ$a!2B!q`$r!3%""3%
  312. X(!3S"%!%5!4B"'J%H!5)"*J%U!5i"-J%d!6F"1`%p!83"5!&-!9!"9!&B!9`"A`&
  313. XM!@J"E`&d!AJ"I!&r!B!"J`')!BJ"M3'5!CF"Q`'J!D8"UJ'Z!E)"YJ'k!Ei"`J(
  314. X'!FS"cJ(5!GB"f!(D!Gd"i!(N!HJ"l!(`!I3"q!(m!J!#"!))!JX#$`)8!KN#(J)
  315. XM!LJ#,3)e!Md#43*(!NS#6`*A!Pi#B`*S!Q`#F!*e!RS#IJ+$!SN#MJ+4!T8#QJ+
  316. XK!UJ#VJ+b!V-#Y`+q!X%#aJ,,!Y%#e3,C!Ym#j3,T!Zm#p3,m!`!$"J-+!`i$%!-
  317. X5!aF$(J-M!bX$+`-V!bX$+`-V!bX$+`-V!bX$+`-V!bX$+`-V!bX$+`-V!bX$+`-
  318. XV!c%$0`-q!!!!!!!!!!!!!!!!rrrrrrrr"JErrrrrrrm!!2rrrrrrrrrrrrrrrrr
  319. Xrrrrrrrrrrrrrrrrrrrm!"rrrrrrrr`-$!3-""3%(!!B!#3!)!3-!"!!%!3F!"J%
  320. X%!!8"!`%'!!B""J!'!!B!"J!'!!B!"J!'!!B#"!%%!38!"J%&!3B!#!%(!!B!"J!
  321. X'!!8!"3!'!!B"!`!'!!B!"3!)!!B!"J!'!!B!"J!'!!B!"J!'!!J!"J!'!!8""!%
  322. X'!33!"!!'!!-!"3!&!!8!"3!&!!3!"3!&!!-!"!!&!!-!#!!&!!8!"3!&!!8!"3!
  323. X%!!8!"J!)!!B!"J!&!!3!!J!%!!B!!!!'!3F!"J!&!!B!"J!'!!8!"3!&!!8!"3!
  324. X&!!8!"3!&!!8!"3!$!!-!"!!%!!8!"3!&!!8!"3!&!!8!"3!&!!8!"!!&!!B!"J!
  325. X'!!B!"J!'!!N!#3!*!33!"!!'!!N!"`%+!!B!"3!&!!B!"J!&!!B!"`-)!J8""3!
  326. X&!!J"#3!'!3B"!`!&!!J""3!'!3F!#!!)!3J!"J!(!`F!"J!*!!J!"3!(!3F#"`%
  327. X%!33!"J!)!!B!#Irrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
  328. Xrrrm!"J!'!!F!!!!!#bD3!!!!!!$[!!m!!2rd!!m!$`5C!!`!!`!"!$i!!!!!!!!
  329. X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  330. X!!!!!!(!"-J!!!!!'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&8!!!!!!!IJ1!!!!!
  331. X!!!!!!!!!$J!i!!!!!!!!!!!!!!!&!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  332. X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#L)!Nb53!!!#3!!!!!!!!!
  333. X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&S#J!!!!!!!!!!jmi!S!+!!!!!!!!!!!m!!
  334. X!"3!%!!!`!!!%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!($!!!!!!!!!!
  335. X!!!!!!!!!!!!!"`!!L!!!!!3K!0N!L#!C"SN%!d5#!3!!!!!!!!!!!!!!!93!!!!
  336. X!!"EmS!!!!!!-!!!+4+!+!#J!!!P+J!!$!I[!!!A46RjK55!!"-6[`Ajhlc`!!2!
  337. X!MjlcrhSB--)1,hchchq'$!Bar38!3)!#!`36$!!!!!!#!!!!!!UC%(([i[3S%T9
  338. XQ!345TYX3LP@)45Z`$(J$cJ!!G&S!IRS!!"%!crq@a+H!!!5!#)!!#PbJ#J!S!!!
  339. X56)!%4J(m,r!&er@5N8M!!!NY%)0!J$$#!!%*i)KKLK#''$&$(M$$$$#)KJ`'-3b
  340. X'J##!!J3%!33!!!!!!J!!!!!+TK!L''--)!!!!!!!!!!!!!!!!!!"54+%"9%H(LE
  341. XJ!+#&9!!+!#44&[5S3!!!!"%!)!T3S!S!+!!!%T8!3!`"r#J3"B+8P+#(mJ!+&K%
  342. X&33"3`J34#K&)B)B3JKJb3Ud`````#)B-49%8K!!1mjlZIEF@c@GjphG'-4M(kS!
  343. XS8JK6$#jcR1FjcR1P+cR1Fk-Ba8Z3!)(T85%K*8!!S)`!K*p%%K%@P,!Zik5!%3!
  344. XJ#P#RqJ!SlJ!!!"#NArAm+"!&MmaS3)6#!")8%`Ppm%p$5!J8k8qJKK##'$4#66$
  345. X$$$!)K4**5K4%!"'-Ba518bFcQ-BiLNBa'-3UJ#K5#&---BaM'-BaM'8XaM'-BaM
  346. X&09"lq9*Fc+4!%5#99)K%4(%4GTH`-44%J#1b8!T3T"Z!la%!!!!"&(rpr#J3"B8
  347. X'%+#&,jm5&##4!`L3!-)6j#8U+'#(hTri1%)-X2d2c`L&%UL+*%3!$i`M&)a64L-
  348. XBaM##4LUP4&*!4)S25``[Hplh`M'-C5M'-BaM'-3&1)Ij89,3J!(jr+3$m$p%N!#
  349. X44TB`,a6)r#&-8*[6[hMrJa%!!!"q$(rjr#J3"B!&,45%!J!L&%"K!`L3!,iJ!N8
  350. XU+'#'%)BB0%)-X-%0!)L%SUP%4#3!%B`Mp)a6KL-BaM"b48UL4)U!4)S)5``aM'-
  351. XB`rrrj5M'-BaM'-3&%)Ie80c3J!!L)-98L%4&%4&fPqK4p9#'33#*+0)*5m([(rr
  352. XJ!!)-3rRm+"!&J!96#)3#!#)8J(q$#4##%!4%prKJKK#'($*#$($"$)#)K+%44%3
  353. XN!"'-)`5-8dBM'-B`#N9%488+J2rq#%F--BaM'-)3K#8SaM'-BaM%"4"lmp$5c)!
  354. X!3L#%!)5%44)4&T3)83C4K8%bLNrcq8Tr+4!!!!!4&%BIr#J3"3!9Na4)!!""*3L
  355. X"3`N3K![S!J3BBBS3KK`a3Ja``5a3L)4"%L5%&!!4M'-8M&-Q)aM'-)T-K%M'#S#
  356. X$"KK($$'-BaM'-BaP+-BaM'Fjc!94"H&4)5%!!I`KK93!"%8N84DF"*%88B#"638
  357. XJ!!&+!#N4!!!!!+4)!I`S%!@!$ScL5!!J`-Ih!6ca$cP%%%(%(jlcm(SEd2i-,d$
  358. Xd,`Ki34)Nr"4rMr1Hj(a6&L-AHI"aY)4)[qU!J`A[`[22HplhZFjcT5LjcR1DeV3
  359. X$[S3"GKiH!!#%2RJ$rq4kcp%@J!c1kik!J3(mN!!!!8S!+1i!!!!!3m!"r#r`"3!
  360. X%!!!`!#!!!!!!!!!!!%!!!!!!!!!!!!!!!!!!!!J!!!!!!!!'$!!!!!!!#!)!!!"
  361. X!)!!!!!!%"`!!!%!!!!!!!!!3!!!!!!!!!!!!!!%!H!!!!!!!!!!!!93!!%!!!"D
  362. X!!!!!!!!"!!!!!!&+!#J!!!!!!!"!!!IJ!!8!!!!!!!"!!!!!!!!!!!#!!!!!!!!
  363. X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)J#!!!!3#!!!!!!4!!!!!!J!!!!!!!!)!!
  364. X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#!!!!@J!!!!!!!!3!!!!!"bJ!S!!!!!!!
  365. X%3!!!!!!&!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  366. X!!!"`$!!!!!!!!!!!!$J!!!!!3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  367. X"9!!!!!!!(i!!!!!!!!)!!!!!!!i!1!!!!!!!!i!!!!!!"3!!!!!!!!!!!!!!!!!
  368. X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  369. X!!!!!!!!!!!%!"!!,!"!!&`!I!#!!)`!Q!#`!-3!c!$J!13!q!%3!4J"-!&)!@3"
  370. XI!'8!D`"a!(F!H!"k!(i!J`#(!)d!P3#F!+)!U!#Z!,-!Z!#q!-3!a3$,!0%!eJ$
  371. XG!1-!k3$[!28!q`%"!3J"$J%9!4i")`%S!5d",`%d!6B"13&"!8-"5!&0!9)"9`&
  372. XF!@!"C3&U!@`"E`&d!AB"I`'%!BN"MJ'6!CJ"R3'K!DB"U`'d!EN"[J($!FB"a`(
  373. X+!G!"d!(A!Gi"j!(T!Hm"p3(l!J!#"3)+!Jm#&!)C!Ki#)`)S!Ld#-J)d!MB#13)
  374. Xm!N%#4J*,!P!#93*D!Pm#C!*T!Qi#F3*e!RS#J!+'!S`#NJ+C!U%#U3+b!V3#Y`+
  375. Xp!XF#c`,@!YX#h`,M!ZJ#l`,d![S$!3-'!`N$$J-6!aX$*!-V!c!$-3-f!ci$330
  376. X(!di$9!0C!ei$C30X!h%$H!0r!iJ$M!16!jJ$R31I!k%$TJ1Y!l)$[`1r!lm$[`1
  377. Xr!lm$[`1r!lm$[`1r!lm$[`1r!lm$[`1r!lm$[`1r!lm$a32,!p8!!2rr!!!!!!!
  378. X!!!$rrrrrrrm)#2rrrrrrr`!!rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
  379. Xrrrrrrrrr"!3"!`%&!3N""`%*!!N"!`%&!38"#!%(!33""`%$!3F"#!-)!3J"#!%
  380. X)!3J"#!%)!3J"#!%$!33""J%(!3B"#!%+!3N"#!%)!3J""`%(!3J"#!)&!!F"#!%
  381. X(!3N"#!%)!3J"#!%)!3J!#!%)!3N"#`%(!3F""`%%!3F""!%%!!J""!%(!3F""`%
  382. X(!3F""J%(!3F""3%'!3F""3%,!3F""`%(!3F""J%(!3B""`%(!3X""`%(!3F""3%
  383. X$!38"#!!!!3N"#3%)!3F"#!%)!3J""`%(!3F""`%(!3F""`%(!3F""`%(!J8""3%
  384. X&!38""`%(!3F""`%(!3F""`%(!3F""`%&!3B""`%)!3J"#!%)!3N"#J%+!3X""!%
  385. X&!3J"$!!)!!X""`%'!3B""`%*!3F"#!%*!JS""3!'!!B"#J%,!!F"#!)%!3F"#J%
  386. X&!3J"#3%)!3J##J!)!3N##3%)!``"#`%'!3N""`%(!33""!%(!3N"#!%2rrrrrrr
  387. Xrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr`)*!JN!#VEE!!!!4!!
  388. X!!!!!!!!!!!J!$!"k!%%!HJ!-!!J!!!!!!!!!!!!!!!!!!!!!!!!!#!!-!(i!I`"
  389. Xq!!`!#!!!!!!!!!!!!!!!"`!*!!!!4!!!!!!!!!!!!!!!!!!!!!!!!!(!!8!"3!G
  390. X`!L!"3!#!!!!!!!!!!!!!!!!!!!!!!!!!!F!"`!(!"r!$i!(!!)!!#3!)!!!!4!!
  391. X!!!!!!!!!!!!3!$!!AJ##!&i!-!!3!!!!!!!!!!!!!!!!!!!!!!!!!"!!-!"q!2i
  392. X!IJ!`!"!!!!!!!!!!!!!!#!!'!!!!4!!!!!!!!!!!!!!!!!!!!!!!!!!!!"!!+3!
  393. XA!!N!#3!I!!!!!!!!!!!!!!!!!!!!!!!!!!!!%!!j!"m!$`!2!"m!#`!,!!!!4!!
  394. X!!!!!!!!!!!!!!!!!!!!!!!!!#!#8!1J!N!!!N!!!q!!!!!!!!!!!!!!!!!!!!!!
  395. X!!!!!!!J!R!$i!2!!m!$i!!!,!!3!!!"%q!#3!!#3!!$S!*3!#!!!!!!!!!!!!!!
  396. X!!!!!!!!!!!!!!2J!m!$`!2J!R!!)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!3!"!!
  397. X!!%3!!!!!($JL4#'%)B355!``$$!55#'%)B3L4"`i!!!!!!!!!!!F1$jm2r`rr"j
  398. Xi$$!--"ji2r`rr$jm($J!!!!!!!F!"`!!!%3"!!+!"%!1i!+!!S!$J!!!!!!!!!!
  399. X!!!!!!!!!!!!!!!%!!i!(`!rJ!i!$J!1!!!!!!!!!!!!!!!!!!!!!!!!!!!B!"`!
  400. X!!%3!(`!*!!N!&`!T!"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!I!!m!$`!I!$N!%!!
  401. X!!!!!!!!!!!!!!!!!!!!!!!!!!!3!#`!!!"!26Q9d5'&MDb"AD@jNEhGc!!!!%3!
  402. X)!6`"2J%%!@m!!@N"C!%X!!!!G!#&!!!!!!!!!!$rrrrI#%0[E@eKEQ4c#N0XD@e
  403. XL)%4[Gfi!!!!!#%0XD@eL)&9`!!!!!!4,D@0V!!!!!!P2F'9Z)%4[Eh)!!!!!!5d
  404. X!!!!!#8PZGQ9ZG'pbH3!!!!!%4(*[F!!!!!!(8'PMDb"9F!!!!!!!!!!!b!#'!!!
  405. X!!!!!!!$rrppr"P4SD@jRF`YAC@&b)%&bE@peFJ!!!!!*9f9KFL"5D@jR!!!!!!a
  406. XAD@9XC#"AC@&`Efi!!!!!$e4KDf8J6fCQ)%&bE@peFJ!!!!!09'&VC5"2CQBJ8QP
  407. XZC`!!!!!19@jhD@9XC#"AC@&`Efi!!!!!!5d!!!!!!d9KG!!!!!!&8A9KCQB!!!!
  408. X!"&*PB@3!!!!!"94SFQph!!!!!!0DBA!!!!!!!5d!!!!!$%4TFf0[GQ9bD@9c2`!
  409. X!!!!!!!!!(3!1!9F"8!&h!93"8J*h,3!"C3&a!A)"G!&k!!&F!!!!%!!(!)!!J3#
  410. X#!)-!K!#&!)B!!!%!!!"&e`!!40F!!!8l!GlUY#1J!!!!(!3H!""A58j%!!B!LP4
  411. X08%`!!!$H6R9YF!!"!1T"6&*8!!%"!N4*9%`!#3%D68*"8J!!!C*048j9!!B"RP0
  412. X88L-!"`(bD@0c0!!#!P*TBh-M!!)#GNP$6L-!!J+DD@0X0!!#!Vj%6%p(!!F#iNC
  413. X26P3!!`0#4Np14!!"!h*$99*6!!J$LP088L!!!!2f!)!!,3!!!(J!!!!!!)%!!!!
  414. X!!!!!!!!!!))!#!!!!#!!!!!!!)-!$`!!!0i!!!!!!)3!&`!!!%!!!!!!!)8!(!!
  415. X!!&S!!!!!!)B!)3!!!3)!!!!!!)!!-J!!!*i!!!!!!)!!0`!!,%-!!!!!!)%!33!
  416. X!,&d!!!!!!)(rrb!!$!%!!!!!!)$rr`!!$kd!!!!!!)(rrb!!$"%!!!!!!)$rr`!
  417. X!$ld!!!!!!),rr`!!%QF!!!!!!)2rr`!!%Xd!!!!!!)6rr`!!&%N!!!!!!)Mrr`!
  418. X!%Gm!!!!!!)Arr`!!%)X!!!!!!)Err`!!%1%!!!!!!)Irr`!!%8N!!!!!!)Rrr`!
  419. X!&CX!!!!!!)$rr`!!4--!!!!!!)(rr`!!!CF"hZN%!),rr`!!!IJ"hZN3!)2rr`!
  420. X!!N3"hZN!!)6rr`!!!qB"hZN)!)$rr`!!!@X"hZMm!)Arr`!!3ei"hZMi!)Err`!
  421. X!3pB"hZMd!)!!GJ!!!5d!!!!!!)%!D`!!!8F!!!!!!))!B3!!!9N!!!!!!)-!9`!
  422. X!!5B!!!!!!)3!53!!!dX!!!!!!)8![J!!!p-!!!!!!)B"!`!!3dN!!!!!!)F"%3!
  423. X!4+)!!!!!!qMrr`!!"'%!!!!!!qRrr`!!"18!!!!!!qVrr`!!&JX!!!!!!qMrr`!
  424. X!"@N!!!!!!qRrr`!!"Dd!!!!!!qVrr`!!$@8!!!!!!qMrr`!!"I%!!!!!!qRrr`!
  425. X!"[8!!!!!!qVrr`!!$'%!!!!!!qMrr`!!"rN!!!!!!qRrr`!!#Id!!!!!!qVrr`!
  426. X!$DN!!!!!!)3!PJ!!%"X!!!!!!)J!K!!!%F-!!!!!!)F!N3!!%$F!!!!!!)B!M3!
  427. X!%&-!!!!!!)8!LJ!!%'m!!!!!!)N!S!!!&Am!!!!!!))!VJ!!$q-!!!!!!)-!Y3!
  428. X!$rm!!!!!5iRrrb!!&Sm!!!!!5icrr`!!)"X!!!!!6!N!h#!!,,d!!!!!6!`!k5!
  429. X!0B-!!!!!!*F!b!3!+rd!!!!!!*J!d33!,(F!!!!!!J$rr`!!3Pd!!!!!!J(rr`!
  430. X!3U8!!!!!!J,rr`!!3Zd!!!!!!J2rr`!!3+d!!!!!!JArr`!!328!!!!!!JIrr`!
  431. X!36d!!!!!!J6rr`!!3B8!!!!!!JErr`!!3Fd!!!!!!JMrr`!!3K8!!!!!!)!!p!!
  432. X!3c8!!!!!"dePFh0KCf8'8h4KG(9c"d4eEQGPEfi%6@9ZG348CAKd#d4TB@GZEh0
  433. XdD@0c"%j96%`%6R9YF!P9ER0SD@CdC@3(8fKTCR4PC!e&H(4PEQ4PC#"0C@je#89
  434. XNDA3J6@9ZG3P'D@aP)%ePER8+3A"`E'8J6@9ZG3e0DA0M,L"6G(*TEQGc"APZ6Q&
  435. Xa!RPZ!hPZF34jEQ&a#80SBA*KBh4PFJe6E@&XE#"(CA4XD@jP"P"bEfe`G!K&H(4
  436. XPEQ4PC!P0DA0M)%ePER8)5'&MDdC[ER3+8&0)B@0V4QpZG!a38dKKBfY'Efjd)$N
  437. X+8&0)B@0V4QpZG!j3FQ9Q)%CTE'8J6Q&YC3e$EfeYB@jNFb"YC@je#e4SD@jRFb"
  438. XYC@je,im:
  439. END_OF_FILE
  440. if test 26186 -ne `wc -c <'sys/mac/NHrsrc.hqx'`; then
  441.     echo shar: \"'sys/mac/NHrsrc.hqx'\" unpacked with wrong size!
  442. fi
  443. # end of 'sys/mac/NHrsrc.hqx'
  444. fi
  445. if test -f 'sys/unix/snd86unx.shr' -a "${1}" != "-c" ; then 
  446.   echo shar: Will not clobber existing file \"'sys/unix/snd86unx.shr'\"
  447. else
  448. echo shar: Extracting \"'sys/unix/snd86unx.shr'\" \(28226 characters\)
  449. sed "s/^X//" >'sys/unix/snd86unx.shr' <<'END_OF_FILE'
  450. X#! /bin/sh
  451. X# This is a shell archive.  Remove anything before this line, then unpack
  452. X# it by saving it into a file and typing "sh file".  To overwrite existing
  453. X# files, type "sh file -c".  You can also feed this as standard input via
  454. X# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  455. X# will see the following message at the end:
  456. X#        "End of shell archive."
  457. X# Contents:  READ.ME Files Install Makefile Master Name Node Remove
  458. X#   Size System playtest spkr.7 spkr.c spkr.h
  459. X# Wrapped by billr@saab on Wed Jan 27 08:37:43 1993
  460. XPATH=/bin:/usr/bin:/usr/ucb ; export PATH
  461. Xif test -f 'READ.ME' -a "${1}" != "-c" ; then 
  462. X  echo shar: Will not clobber existing file \"'READ.ME'\"
  463. Xelse
  464. Xecho shar: Extracting \"'READ.ME'\" \(1372 characters\)
  465. Xsed "s/^X//" >'READ.ME' <<'END_OF_FILE'
  466. XX        Console Speaker Driver Package (v1.1)
  467. XX
  468. XX        by Eric S. Raymond (esr@snark.thyrsus.com)
  469. XX
  470. XXThis package gives 80386 machines running SVr3.2 or later the ability to play
  471. XXtunes on the console speaker. It is structured as a standard installable driver
  472. XXkit containing the following files:
  473. XX
  474. XXDocumentation and examples:
  475. XXREAD.ME        -- this file
  476. XXspeaker.7    -- man page for the driver
  477. XXplaytest    -- test script exercising familiar tunes
  478. XX
  479. XXInstallable driver kit parts:
  480. XXFiles        -- list of driver package file locations
  481. XXInstall        -- installation script for driver kit
  482. XXMaster        -- mdevice entry for speaker driver
  483. XXName        -- name entry foe speaker driver
  484. XXNode        -- /dev node specification file
  485. XXRemove        -- Driver removal script
  486. XXSize        -- installation size data
  487. XXSystem        -- sdevice entry for speaker driver
  488. XX
  489. XXDriver source code:
  490. XXMakefile    -- Makefile for driver code
  491. XXspkr.c        -- the driver source
  492. XXspeaker.h    -- ioctl interface file
  493. XX
  494. XXTo make the installable code, simply type `make' and wait. The type ./Install
  495. XXand follow its instructions. You will have to install the man pages by hand.
  496. XXBe aware that the speaker.7 man page uses tbl(1) constructs.
  497. XX
  498. XXInteresting tunes mailed to the author will be periodically posted in batches
  499. XXand added to the test script for future versions.
  500. XX
  501. XX            Revision notes
  502. XX
  503. XX1.1 -- fixed minor bug in M[LSN] interpretation, added octave-tracking.
  504. XX       Tweaked the playtest examples.
  505. XEND_OF_FILE
  506. Xif test 1372 -ne `wc -c <'READ.ME'`; then
  507. X    echo shar: \"'READ.ME'\" unpacked with wrong size!
  508. Xfi
  509. X# end of 'READ.ME'
  510. Xfi
  511. Xif test -f 'Files' -a "${1}" != "-c" ; then 
  512. X  echo shar: Will not clobber existing file \"'Files'\"
  513. Xelse
  514. Xecho shar: Extracting \"'Files'\" \(24 characters\)
  515. Xsed "s/^X//" >'Files' <<'END_OF_FILE'
  516. XX/usr/include/sys/spkr.h
  517. XEND_OF_FILE
  518. Xif test 24 -ne `wc -c <'Files'`; then
  519. X    echo shar: \"'Files'\" unpacked with wrong size!
  520. Xfi
  521. X# end of 'Files'
  522. Xfi
  523. Xif test -f 'Install' -a "${1}" != "-c" ; then 
  524. X  echo shar: Will not clobber existing file \"'Install'\"
  525. Xelse
  526. Xecho shar: Extracting \"'Install'\" \(812 characters\)
  527. Xsed "s/^X//" >'Install' <<'END_OF_FILE'
  528. XX#
  529. XX# Speaker driver installation script
  530. XX#
  531. XXTMP=/tmp/speaker.err
  532. XXERR1=" Errors have been written to the file $TMP."
  533. XXERR2=" The Speaker Driver software was not installed."
  534. XX
  535. XXecho "Installing Speaker Driver Software Package"
  536. XX
  537. XX/etc/conf/bin/idcheck -p speaker 2>$TMP
  538. XXif [ $? != 0 ]
  539. XXthen
  540. XX    echo "The speaker package is already at least partly installed.
  541. XX    Removing the old version now..."
  542. XX    /etc/conf/bin/idinstall -d speaker
  543. XXfi
  544. XX
  545. XX/etc/conf/bin/idinstall -a -k speaker 2>>$TMP
  546. XXif [ $? != 0 ]
  547. XXthen
  548. XX    message "There was an error during package installation. $ERR1 $ERR2"
  549. XX    exit 1
  550. XXfi
  551. XX
  552. XX/etc/conf/bin/idbuild 2>>$TMP
  553. XXif [ $? != 0 ]
  554. XXthen
  555. XX    message "There was an error during kernel reconfiguration. $ERR1 $ERR2"
  556. XX    exit 1
  557. XXfi
  558. XX
  559. XXrm -f $TMP
  560. XX
  561. XXcp spkr.h /usr/include/sys/spkr.h
  562. XX
  563. XXecho "Performing shutdown..."
  564. XXcd /; exec /etc/shutdown -g0 -y
  565. XEND_OF_FILE
  566. Xif test 812 -ne `wc -c <'Install'`; then
  567. X    echo shar: \"'Install'\" unpacked with wrong size!
  568. Xfi
  569. X# end of 'Install'
  570. Xfi
  571. Xif test -f 'Makefile' -a "${1}" != "-c" ; then 
  572. X  echo shar: Will not clobber existing file \"'Makefile'\"
  573. Xelse
  574. Xecho shar: Extracting \"'Makefile'\" \(353 characters\)
  575. Xsed "s/^X//" >'Makefile' <<'END_OF_FILE'
  576. XX#
  577. XX# Speaker driver package makefile
  578. XX#
  579. XXCFLAGS = -I. -O # -DDEBUG
  580. XXLDFLAGS = -s
  581. XX
  582. XXall: Driver.o
  583. XX
  584. XXinstall:
  585. XX    ./Install
  586. XX
  587. XXDriver.o: spkr.c
  588. XX    $(CC) $(CFLAGS) -c spkr.c
  589. XX    mv spkr.o Driver.o
  590. XX
  591. XXclean:
  592. XX    rm -f Driver.o *~ speaker.shar
  593. XX
  594. XXDSP =  Files Install Master Name Node Remove Size System 
  595. XXshar:
  596. XX    shar READ.ME spkr.7 Makefile spkr.[ch] $(DSP) playtest >speaker.shar
  597. XEND_OF_FILE
  598. Xif test 353 -ne `wc -c <'Makefile'`; then
  599. X    echo shar: \"'Makefile'\" unpacked with wrong size!
  600. Xfi
  601. X# end of 'Makefile'
  602. Xfi
  603. Xif test -f 'Master' -a "${1}" != "-c" ; then 
  604. X  echo shar: Will not clobber existing file \"'Master'\"
  605. Xelse
  606. Xecho shar: Extracting \"'Master'\" \(34 characters\)
  607. Xsed "s/^X//" >'Master' <<'END_OF_FILE'
  608. XXspeaker    ocwi    iocH    spkr    0    0    1    1    -1
  609. XEND_OF_FILE
  610. Xif test 34 -ne `wc -c <'Master'`; then
  611. X    echo shar: \"'Master'\" unpacked with wrong size!
  612. Xfi
  613. X# end of 'Master'
  614. Xfi
  615. Xif test -f 'Name' -a "${1}" != "-c" ; then 
  616. X  echo shar: Will not clobber existing file \"'Name'\"
  617. Xelse
  618. Xecho shar: Extracting \"'Name'\" \(39 characters\)
  619. Xsed "s/^X//" >'Name' <<'END_OF_FILE'
  620. XX386 UNIX Speaker Device Driver Package
  621. XEND_OF_FILE
  622. Xif test 39 -ne `wc -c <'Name'`; then
  623. X    echo shar: \"'Name'\" unpacked with wrong size!
  624. Xfi
  625. X# end of 'Name'
  626. Xfi
  627. Xif test -f 'Node' -a "${1}" != "-c" ; then 
  628. X  echo shar: Will not clobber existing file \"'Node'\"
  629. Xelse
  630. Xecho shar: Extracting \"'Node'\" \(20 characters\)
  631. Xsed "s/^X//" >'Node' <<'END_OF_FILE'
  632. XXspeaker    speaker    c    0
  633. XEND_OF_FILE
  634. Xif test 20 -ne `wc -c <'Node'`; then
  635. X    echo shar: \"'Node'\" unpacked with wrong size!
  636. Xfi
  637. X# end of 'Node'
  638. Xfi
  639. Xif test -f 'Remove' -a "${1}" != "-c" ; then 
  640. X  echo shar: Will not clobber existing file \"'Remove'\"
  641. Xelse
  642. Xecho shar: Extracting \"'Remove'\" \(475 characters\)
  643. Xsed "s/^X//" >'Remove' <<'END_OF_FILE'
  644. XX#
  645. XX# Speaker driver remove script
  646. XX#
  647. XXTMP=/tmp/speaker.err
  648. XXRERR="Errors have been written to the file $TMP."
  649. XX
  650. XXecho "Removing Speaker Driver Software Package"
  651. XX
  652. XX/etc/conf/bin/idinstall -d speaker 2>$TMP
  653. XXif [ $? != 0 ]
  654. XXthen
  655. XX    message "There was an error during package removal. $RERR"
  656. XX    exit 1
  657. XXfi
  658. XX
  659. XX/etc/conf/bin/idbuild 2>>$TMP
  660. XXif [ $? != 0 ]
  661. XXthen
  662. XX    message "There was an error during kernel reconfiguration. $RERR"
  663. XX    exit 1
  664. XXfi
  665. XX
  666. XXrm -f /dev/speaker $TMP /usr/include/sys/spkr.h
  667. XX
  668. XXexit 0
  669. XEND_OF_FILE
  670. Xif test 475 -ne `wc -c <'Remove'`; then
  671. X    echo shar: \"'Remove'\" unpacked with wrong size!
  672. Xfi
  673. X# end of 'Remove'
  674. Xfi
  675. Xif test -f 'Size' -a "${1}" != "-c" ; then 
  676. X  echo shar: Will not clobber existing file \"'Size'\"
  677. Xelse
  678. Xecho shar: Extracting \"'Size'\" \(18 characters\)
  679. Xsed "s/^X//" >'Size' <<'END_OF_FILE'
  680. XXROOT=1400
  681. XXUSR=100
  682. XEND_OF_FILE
  683. Xif test 18 -ne `wc -c <'Size'`; then
  684. X    echo shar: \"'Size'\" unpacked with wrong size!
  685. Xfi
  686. X# end of 'Size'
  687. Xfi
  688. Xif test -f 'System' -a "${1}" != "-c" ; then 
  689. X  echo shar: Will not clobber existing file \"'System'\"
  690. Xelse
  691. Xecho shar: Extracting \"'System'\" \(26 characters\)
  692. Xsed "s/^X//" >'System' <<'END_OF_FILE'
  693. XXspeaker    Y    1    0    0    0    0    0    0    0
  694. XEND_OF_FILE
  695. Xif test 26 -ne `wc -c <'System'`; then
  696. X    echo shar: \"'System'\" unpacked with wrong size!
  697. Xfi
  698. X# end of 'System'
  699. Xfi
  700. Xif test -f 'playtest' -a "${1}" != "-c" ; then 
  701. X  echo shar: Will not clobber existing file \"'playtest'\"
  702. Xelse
  703. Xecho shar: Extracting \"'playtest'\" \(729 characters\)
  704. Xsed "s/^X//" >'playtest' <<'END_OF_FILE'
  705. XX#
  706. XX# Test script for the speaker driver
  707. XX#
  708. XX# v1.0 by Eric S. Raymond (Feb 1990)
  709. XX#
  710. XXreveille="t255l8c.f.afc~c.f.afc~c.f.afc.f.a..f.~c.f.afc~c.f.afc~c.f.afc~c.f.."
  711. XXcontact="<cd<a#~<a#>f"
  712. XXdance="t240<cfcfgagaa#b#>dc<a#a.~fg.gaa#.agagec~cfcfgagaa#b#>dc<a#a.~fg.gga.agfgfgf"
  713. XXloony="t255cf8f8edc<a>~cf8f8edd#e~ce8cdce8cd.<a>c8c8c#def8af8"
  714. XX
  715. XXcase $1 in
  716. XXreveille) echo  $reveille >/dev/speaker;;
  717. XXcontact)  echo  $contact >/dev/speaker;;
  718. XXdance)  echo  $dance >/dev/speaker;;
  719. XXloony)  echo  $loony >/dev/speaker;;
  720. XX*)
  721. XX    echo "No such tune. Available tunes are:\n"
  722. XX    echo "reveille -- Reveille"
  723. XX    echo "contact -- Contact theme from Close Encounters"
  724. XX    echo "dance -- Lord of the Dance (aka Simple Gifts)"
  725. XX    echo "loony -- Loony Toons theme"
  726. XX    ;;
  727. XXesac
  728. XEND_OF_FILE
  729. Xif test 729 -ne `wc -c <'playtest'`; then
  730. X    echo shar: \"'playtest'\" unpacked with wrong size!
  731. Xfi
  732. X# end of 'playtest'
  733. Xfi
  734. Xif test -f 'spkr.7' -a "${1}" != "-c" ; then 
  735. X  echo shar: Will not clobber existing file \"'spkr.7'\"
  736. Xelse
  737. Xecho shar: Extracting \"'spkr.7'\" \(5533 characters\)
  738. Xsed "s/^X//" >'spkr.7' <<'END_OF_FILE'
  739. XX.deTH
  740. XX.PD
  741. XX.nrIN \\n()Mu
  742. XX.ift .ds ]H \\$1\^(\^\\$2\^)
  743. XX.ifn .ds ]H \\$1(\\$2)
  744. XX.if\\n()s .ds ]D
  745. XX.if\\n()t .ds ]D UNIX System V
  746. XX.ifn .ds ]D UNIX System V (addition)
  747. XX.ds]L
  748. XX.if!^\\$3^^ .ds ]L (\^\\$3\^)
  749. XX.if!^\\$4^^ .ds ]D \\$4
  750. XX.wh0 }H
  751. XX.wh-\\n(:mu }F
  752. XX.em}M
  753. XX.if\\n(nl .bp
  754. XX.nr)I \\n()Mu
  755. XX.nr)R 0
  756. XX.}E
  757. XX.DT
  758. XX.ifn \{.na
  759. XX.nh\}
  760. XX.ift \{.bd S 3 3
  761. XX.hy14 \}
  762. XX..
  763. XX.TH SPKR 7
  764. XX.SH NAME
  765. XXspkr \- console speaker device driver
  766. XX.SH DESCRIPTION
  767. XXThe speaker device driver allows applications to control the PC console
  768. XXspeaker on an IBM-PC-compatible machine running UNIX.
  769. XX.PP
  770. XXOnly one process may have this device open at any given time; open() and
  771. XXclose() are used to lock and relinquish it. An attempt to open() when
  772. XXanother process has the device locked will return -1 with an EBUSY error
  773. XXindication. Writes to the device are interpreted as 'play strings' in a
  774. XXsimple ASCII melody notation. An ioctl() for tone generation at arbitrary
  775. XXfrequencies is also supported.
  776. XX.PP
  777. XXSound-generation does \fInot\fR monopolize the processor; in fact, the driver
  778. XXspends most of its time sleeping while the PC hardware is emitting
  779. XXtones. Other processes may emit beeps while the driver is running.
  780. XX.PP
  781. XXApplications may call ioctl() on a speaker file descriptor to control the
  782. XXspeaker driver directly; definitions for the ioctl() interface are in
  783. XXsys/spkr.h. The tone_t structure used in these calls has two fields,
  784. XXspecifying a frequency (in hz) and a duration (in 1/100ths of a second).
  785. XXA frequency of zero is interpreted as a rest.
  786. XX.PP
  787. XXAt present there are two such ioctls. SPKRTONE accepts a pointer to a
  788. XXsingle tone structure as third argument and plays it. SPKRTUNE accepts a
  789. XXpointer to the first of an array of tone structures and plays them in
  790. XXcontinuous sequence; this array must be terminated by a final member with
  791. XXa zero duration.
  792. XX.PP
  793. XXThe play-string language is modelled on the PLAY statement conventions of
  794. XXIBM BASIC 2.0. The MB, MF and X primitives of PLAY are not useful in a UNIX 
  795. XXenvironment and are omitted. The `octave-tracking' feature is also new.
  796. XX.PP
  797. XXThere are 84 accessible notes numbered 1-83 in 7 octaves, each running from
  798. XXC to B, numbered 0-6; the scale is equal-tempered A440 and octave 3 starts
  799. XXwith middle C. By default, the play function emits half-second notes with the
  800. XXlast 1/16th second being `rest time'.
  801. XX.PP
  802. XXPlay strings are interpreted left to right as a series of play command groups;
  803. XXletter case is ignored. Play command groups are as follows:
  804. XX.PP
  805. XXCDEFGAB -- letters A through G cause the corresponding note to be played in the
  806. XXcurrent octave. A note letter may optionally be followed by an \fIaccidental
  807. XXsign\fR, one of # + or -; the first two of these cause it to be sharped one
  808. XXhalf-tone, the last causes it to be flatted one half-tone. It may also be
  809. XXfollowed by a time value number and by sustain dots (see below). Time values
  810. XXare interpreted as for the L command below;.
  811. XX.PP
  812. XXO <n> -- if <n> is numeric, this sets the current octave. <n> may also be one
  813. XXof 'L' or 'N' to enable or disable octave-tracking (it is disabled by default).
  814. XXWhen octave-tracking is on, interpretation of a pair of letter notes will
  815. XXchange octaves if necessary in order to make the smallest possible jump between
  816. XXnotes. Thus "olbc" will be played as "olb>c", and "olcb" as "olc<b". Octave
  817. XXlocking is disabled for one letter note following by >, < and O[0123456].
  818. XX.PP
  819. XX> -- bump the current octave up one.
  820. XX.PP
  821. XX< -- drop the current octave down one.
  822. XX.PP
  823. XXN <n> -- play note n, n being 1 to 84 or 0 for a rest of current time value.
  824. XXMay be followedv by sustain dots.
  825. XX.PP
  826. XXL <n> -- sets the current time value for notes. The default is L4, quarter
  827. XXnotes. The lowest possible value is 1; values up to 64 are accepted. L1 sets
  828. XXwhole notes, L2 sets half notes, L4 sets quarter notes, etc..
  829. XX.PP
  830. XXP <n> -- pause (rest), with <n> interpreted as for L. May be followed by
  831. XXsustain dots. May also be written '~'.
  832. XX.PP
  833. XXT <n> -- Sets the number of quarter notes per minute; default is 120. Musical
  834. XXnames for common tempi are:
  835. XX
  836. XX.TS
  837. XXa a a.
  838. XX            Tempo        Beats Per Minute
  839. XXvery slow    Larghissimo    
  840. XX            Largo        40-60
  841. XX             Larghetto        60-66
  842. XX            Grave           
  843. XX            Lento           
  844. XX            Adagio           66-76
  845. XXslow        Adagietto        
  846. XX            Andante       76-108
  847. XXmedium       Andantino    
  848. XX            Moderato    108-120
  849. XXfast        Allegretto    
  850. XX            Allegro       120-168
  851. XX            Vivace        
  852. XX            Veloce        
  853. XX            Presto        168-208
  854. XXvery fast    Prestissimo    
  855. XX.TE
  856. XX.PP
  857. XXM[LNS] -- set articulation. MN (N for normal) is the default; the last 1/8th of
  858. XXthe note's value is rest time. You can set ML for legato (no rest space) or
  859. XXMS (staccato) 1/4 rest space.
  860. XX.PP
  861. XXNotes (that is, CDEFGAB or N command character groups) may be followed by
  862. XXsustain dots. Each dot causes the note's value to be lengthened by one-half
  863. XXfor each one. Thus, a note dotted once is held for 3/2 of its undotted value;
  864. XXdotted twice, it is held 9/4, and three times would give 27/8. 
  865. XX.PP
  866. XXWhitespace in play strings is simply skipped and may be used to separate
  867. XXmelody sections.
  868. XX.SH BUGS
  869. XXDue to roundoff in the pitch tables and slop in the tone-generation and timer
  870. XXhardware (neither of which was designed for precision), neither pitch accuracy
  871. XXnor timings will be mathematically exact. There is no volume control.
  872. XX.PP
  873. XXIn play strings which are very long (longer than your system's physical I/O
  874. XXblocks) note suffixes or numbers may occasionally be parsed incorrectly due
  875. XXto crossing a block boundary.
  876. XX.SH FILES
  877. XX/dev/speaker -- speaker device file
  878. XX.SH AUTHOR
  879. XXEric S. Raymond (esr@snark.thyrsus.com) Feb 1990
  880. XEND_OF_FILE
  881. Xif test 5533 -ne `wc -c <'spkr.7'`; then
  882. X    echo shar: \"'spkr.7'\" unpacked with wrong size!
  883. Xfi
  884. X# end of 'spkr.7'
  885. Xfi
  886. Xif test -f 'spkr.c' -a "${1}" != "-c" ; then 
  887. X  echo shar: Will not clobber existing file \"'spkr.c'\"
  888. Xelse
  889. Xecho shar: Extracting \"'spkr.c'\" \(12412 characters\)
  890. Xsed "s/^X//" >'spkr.c' <<'END_OF_FILE'
  891. XX/*
  892. XX * spkr.c -- device driver for console speaker on 80386
  893. XX *
  894. XX * v1.1 by Eric S. Raymond (esr@snark.thyrsus.com) Feb 1990
  895. XX */
  896. XX
  897. XX#include <sys/types.h>
  898. XX#include <sys/param.h>
  899. XX#include <sys/dir.h>
  900. XX#include <sys/signal.h>
  901. XX#include <sys/errno.h>
  902. XX#include <sys/ioctl.h>
  903. XX#include <sys/user.h>
  904. XX#include <sys/sysmacros.h> 
  905. XX#include <limits.h>
  906. XX
  907. XX#include "spkr.h"
  908. XX
  909. XX/**************** MACHINE DEPENDENT PART STARTS HERE *************************
  910. XX *
  911. XX * This section defines a function tone() which causes a tone of given
  912. XX * frequency and duration from the 80x86's console speaker.
  913. XX * Another function endtone() is defined to force sound off, and there is
  914. XX * also a rest() entry point to do pauses.
  915. XX *
  916. XX * Audible sound is generated using the Programmable Interval Timer (PIT) and
  917. XX * Programmable Peripheral Interface (PPI) attached to the 80x86's speaker. The
  918. XX * PPI controls whether sound is passed through at all; the PIT's channel 2 is
  919. XX * used to generate clicks (a square wave) of whatever frequency is desired.
  920. XX *
  921. XX * This code requires SVr3.2-compatible inb(), outb(), timeout(), sleep(),
  922. XX * and wakeup().
  923. XX */
  924. XX
  925. XX/*
  926. XX * PIT and PPI port addresses and control values
  927. XX *
  928. XX * Most of the magic is hidden in the TIMER_PREP value, which selects PIT
  929. XX * channel 2, frequency LSB first, square-wave mode and binary encoding.
  930. XX * The encoding is as follows:
  931. XX *
  932. XX * +----------+----------+---------------+-----+
  933. XX * |  1    0  |  1    1  |  0    1    1  |  0  |
  934. XX * | SC1  SC0 | RW1  RW0 | M2   M1   M0  | BCD |
  935. XX * +----------+----------+---------------+-----+
  936. XX *   Counter     Write        Mode 3      Binary
  937. XX *  Channel 2  LSB first,  (Square Wave) Encoding 
  938. XX *             MSB second
  939. XX */
  940. XX#define PPI        0x61    /* port of Programmable Peripheral Interface */
  941. XX#define PPI_SPKR    0x03    /* turn these PPI bits on to pass sound */
  942. XX#define PIT_CTRL    0x43    /* PIT control address */
  943. XX#define PIT_COUNT    0x42    /* PIT count address */
  944. XX#define PIT_MODE    0xB6    /* set timer mode for sound generation */
  945. XX
  946. XX/*
  947. XX * Magic numbers for timer control. 
  948. XX */
  949. XX#define TIMER_CLK    1193180L    /* corresponds to 18.2 MHz tick rate */
  950. XX
  951. XXstatic int endtone()
  952. XX/* turn off the speaker, ending current tone */
  953. XX{
  954. XX    wakeup(endtone);
  955. XX    outb(PPI, inb(PPI) & ~PPI_SPKR);
  956. XX}
  957. XX
  958. XXstatic void tone(hz, ticks)
  959. XX/* emit tone of frequency hz for given number of ticks */
  960. XXunsigned int hz, ticks;
  961. XX{
  962. XX    unsigned int divisor = TIMER_CLK / hz;
  963. XX    int sps;
  964. XX
  965. XX#ifdef DEBUG
  966. XX    printf("tone: hz=%d ticks=%d\n", hz, ticks);
  967. XX#endif /* DEBUG */
  968. XX
  969. XX    /* set timer to generate clicks at given frequency in Hertz */
  970. XX    sps = spl5();
  971. XX    outb(PIT_CTRL, PIT_MODE);        /* prepare timer */
  972. XX    outb(PIT_COUNT, (divisor & 0xff));    /* send lo byte */
  973. XX    outb(PIT_COUNT, (divisor >> 8));    /* send hi byte */
  974. XX    splx(sps);
  975. XX
  976. XX    /* turn the speaker on */
  977. XX    outb(PPI, inb(PPI) | PPI_SPKR);
  978. XX
  979. XX    /*
  980. XX     * Set timeout to endtone function, then give up the timeslice.
  981. XX     * This is so other processes can execute while the tone is being
  982. XX     * emitted.
  983. XX     */
  984. XX    timeout(endtone, (char *)NULL, ticks);
  985. XX    sleep(endtone, PZERO - 1);
  986. XX}
  987. XX
  988. XXstatic int endrest()
  989. XX/* end a rest */
  990. XX{
  991. XX    wakeup(endrest);
  992. XX}
  993. XX
  994. XXstatic void rest(ticks)
  995. XX/* rest for given number of ticks */
  996. XXint    ticks;
  997. XX{
  998. XX    /*
  999. XX     * Set timeout to endrest function, then give up the timeslice.
  1000. XX     * This is so other processes can execute while the rest is being
  1001. XX     * waited out.
  1002. XX     */
  1003. XX#ifdef DEBUG
  1004. XX    printf("rest: %d\n", ticks);
  1005. XX#endif /* DEBUG */
  1006. XX    timeout(endrest, (char *)NULL, ticks);
  1007. XX    sleep(endrest, PZERO - 1);
  1008. XX}
  1009. XX
  1010. XX/**************** PLAY STRING INTERPRETER BEGINS HERE **********************
  1011. XX *
  1012. XX * Play string interpretation is modelled on IBM BASIC 2.0's PLAY statement;
  1013. XX * M[LNS] are missing and the ~ synonym and octave-tracking facility is added.
  1014. XX * Requires tone(), rest(), and endtone(). String play is not interruptible
  1015. XX * except possibly at physical block boundaries.
  1016. XX */
  1017. XX
  1018. XXtypedef int    bool;
  1019. XX#define TRUE    1
  1020. XX#define FALSE    0
  1021. XX
  1022. XX#define toupper(c)    ((c) - ' ' * (((c) >= 'a') && ((c) <= 'z')))
  1023. XX#define isdigit(c)    (((c) >= '0') && ((c) <= '9'))
  1024. XX#define dtoi(c)        ((c) - '0')
  1025. XX
  1026. XXstatic int octave;    /* currently selected octave */
  1027. XXstatic int whole;    /* whole-note time at current tempo, in ticks */
  1028. XXstatic int value;    /* whole divisor for note time, quarter note = 1 */
  1029. XXstatic int fill;    /* controls spacing of notes */
  1030. XXstatic bool octtrack;    /* octave-tracking on? */
  1031. XXstatic bool octprefix;    /* override current octave-tracking state? */
  1032. XX
  1033. XX/*
  1034. XX * Magic number avoidance...
  1035. XX */
  1036. XX#define SECS_PER_MIN    60    /* seconds per minute */
  1037. XX#define WHOLE_NOTE    4    /* quarter notes per whole note */
  1038. XX#define MIN_VALUE    64    /* the most we can divide a note by */
  1039. XX#define DFLT_VALUE    4    /* default value (quarter-note) */
  1040. XX#define FILLTIME    8    /* for articulation, break note in parts */
  1041. XX#define STACCATO    6    /* 6/8 = 3/4 of note is filled */
  1042. XX#define NORMAL        7    /* 7/8ths of note interval is filled */
  1043. XX#define LEGATO        8    /* all of note interval is filled */
  1044. XX#define DFLT_OCTAVE    4    /* default octave */
  1045. XX#define MIN_TEMPO    32    /* minimum tempo */
  1046. XX#define DFLT_TEMPO    120    /* default tempo */
  1047. XX#define MAX_TEMPO    255    /* max tempo */
  1048. XX#define NUM_MULT    3    /* numerator of dot multiplier */
  1049. XX#define DENOM_MULT    2    /* denominator of dot multiplier */
  1050. XX
  1051. XX/* letter to half-tone:  A   B  C  D  E  F  G */
  1052. XXstatic int notetab[8] = {9, 11, 0, 2, 4, 5, 7};
  1053. XX
  1054. XX/*
  1055. XX * This is the American Standard A440 Equal-Tempered scale with frequencies
  1056. XX * rounded to nearest integer. Thank Goddess for the good ol' CRC Handbook...
  1057. XX * our octave 0 is standard octave 2.
  1058. XX */
  1059. XX#define OCTAVE_NOTES    12    /* semitones per octave */
  1060. XXstatic int pitchtab[] =
  1061. XX{
  1062. XX/*        C     C#    D     D#    E     F     F#    G     G#    A     A#    B*/
  1063. XX/* 0 */   65,   69,   73,   78,   82,   87,   93,   98,  103,  110,  117,  123,
  1064. XX/* 1 */  131,  139,  147,  156,  165,  175,  185,  196,  208,  220,  233,  247,
  1065. XX/* 2 */  262,  277,  294,  311,  330,  349,  370,  392,  415,  440,  466,  494,
  1066. XX/* 3 */  523,  554,  587,  622,  659,  698,  740,  784,  831,  880,  932,  988,
  1067. XX/* 4 */ 1047, 1109, 1175, 1245, 1319, 1397, 1480, 1568, 1661, 1760, 1865, 1975,
  1068. XX/* 5 */ 2093, 2217, 2349, 2489, 2637, 2794, 2960, 3136, 3322, 3520, 3729, 3951,
  1069. XX/* 6 */ 4186, 4435, 4698, 4978, 5274, 5588, 5920, 6272, 6644, 7040, 7459, 7902,
  1070. XX};
  1071. XX
  1072. XXstatic void playinit()
  1073. XX{
  1074. XX    octave = DFLT_OCTAVE;
  1075. XX    whole = (HZ * SECS_PER_MIN * WHOLE_NOTE) / DFLT_TEMPO;
  1076. XX    fill = NORMAL;
  1077. XX    value = DFLT_VALUE;
  1078. XX    octtrack = FALSE;
  1079. XX    octprefix = TRUE;    /* act as though there was an initial O(n) */
  1080. XX}
  1081. XX
  1082. XXstatic void playtone(pitch, value, sustain)
  1083. XX/* play tone of proper duration for current rhythm signature */
  1084. XXint    pitch, value, sustain;
  1085. XX{
  1086. XX    register int    sound, silence, snum = 1, sdenom = 1;
  1087. XX
  1088. XX    /* this weirdness avoids floating-point arithmetic */
  1089. XX    for (; sustain; sustain--)
  1090. XX    {
  1091. XX    snum *= NUM_MULT;
  1092. XX    sdenom *= DENOM_MULT;
  1093. XX    }
  1094. XX
  1095. XX    if (pitch == -1)
  1096. XX    rest(whole * snum / value * sdenom);
  1097. XX    else
  1098. XX    {
  1099. XX    sound = (whole * snum) / (value * sdenom)
  1100. XX        - (whole * (FILLTIME - fill)) / (value * FILLTIME);
  1101. XX    silence = whole * (FILLTIME-fill) * snum / (FILLTIME * value * sdenom);
  1102. XX
  1103. XX#ifdef DEBUG
  1104. XX    printf("playtone: pitch %d for %d ticks, rest for %d ticks\n",
  1105. XX            pitch, sound, silence);
  1106. XX#endif /* DEBUG */
  1107. XX
  1108. XX    tone(pitchtab[pitch], sound);
  1109. XX    if (fill != LEGATO)
  1110. XX        rest(silence);
  1111. XX    }
  1112. XX}
  1113. XX
  1114. XXstatic int abs(n)
  1115. XXint n;
  1116. XX{
  1117. XX    if (n < 0)
  1118. XX    return(-n);
  1119. XX    else
  1120. XX    return(n);
  1121. XX}
  1122. XX
  1123. XXstatic void playstring(cp, slen)
  1124. XX/* interpret and play an item from a notation string */
  1125. XXchar    *cp;
  1126. XXsize_t    slen;
  1127. XX{
  1128. XX    int        pitch, lastpitch = OCTAVE_NOTES * DFLT_OCTAVE;
  1129. XX
  1130. XX#define GETNUM(cp, v)    for(v=0; isdigit(cp[1]) && slen > 0; ) \
  1131. XX                {v = v * 10 + (*++cp - '0'); slen--;}
  1132. XX    for (; slen--; cp++)
  1133. XX    {
  1134. XX    int        sustain, timeval, tempo;
  1135. XX    register char    c = toupper(*cp);
  1136. XX
  1137. XX#ifdef DEBUG
  1138. XX    printf("playstring: %c (%x)\n", c, c);
  1139. XX#endif /* DEBUG */
  1140. XX
  1141. XX    switch (c)
  1142. XX    {
  1143. XX    case 'A':  case 'B': case 'C': case 'D': case 'E': case 'F': case 'G':
  1144. XX
  1145. XX        /* compute pitch */
  1146. XX        pitch = notetab[c - 'A'] + octave * OCTAVE_NOTES;
  1147. XX
  1148. XX        /* this may be followed by an accidental sign */
  1149. XX        if (cp[1] == '#' || cp[1] == '+')
  1150. XX        {
  1151. XX        ++pitch;
  1152. XX        ++cp;
  1153. XX        slen--;
  1154. XX        }
  1155. XX        else if (cp[1] == '-')
  1156. XX        {
  1157. XX        --pitch;
  1158. XX        ++cp;
  1159. XX        slen--;
  1160. XX        }
  1161. XX
  1162. XX        /*
  1163. XX         * If octave-tracking mode is on, and there has been no octave-
  1164. XX         * setting prefix, find the version of the current letter note
  1165. XX         * closest to the last regardless of octave.
  1166. XX         */
  1167. XX        if (octtrack && !octprefix)
  1168. XX        {
  1169. XX        if (abs(pitch-lastpitch) > abs(pitch+OCTAVE_NOTES-lastpitch))
  1170. XX        {
  1171. XX            ++octave;
  1172. XX            pitch += OCTAVE_NOTES;
  1173. XX        }
  1174. XX
  1175. XX        if (abs(pitch-lastpitch) > abs((pitch-OCTAVE_NOTES)-lastpitch))
  1176. XX        {
  1177. XX            --octave;
  1178. XX            pitch -= OCTAVE_NOTES;
  1179. XX        }
  1180. XX        }
  1181. XX        octprefix = FALSE;
  1182. XX        lastpitch = pitch;
  1183. XX
  1184. XX        /* ...which may in turn be followed by an override time value */
  1185. XX        GETNUM(cp, timeval);
  1186. XX        if (timeval <= 0 || timeval > MIN_VALUE)
  1187. XX        timeval = value;
  1188. XX
  1189. XX        /* ...and/or sustain dots */
  1190. XX        for (sustain = 0; cp[1] == '.'; cp++)
  1191. XX        {
  1192. XX        slen--;
  1193. XX        sustain++;
  1194. XX        }
  1195. XX
  1196. XX        /* time to emit the actual tone */
  1197. XX        playtone(pitch, timeval, sustain);
  1198. XX        break;
  1199. XX
  1200. XX    case 'O':
  1201. XX        if (cp[1] == 'N' || cp[1] == 'n')
  1202. XX        {
  1203. XX        octprefix = octtrack = FALSE;
  1204. XX        ++cp;
  1205. XX        slen--;
  1206. XX        }
  1207. XX        else if (cp[1] == 'L' || cp[1] == 'l')
  1208. XX        {
  1209. XX        octtrack = TRUE;
  1210. XX        ++cp;
  1211. XX        slen--;
  1212. XX        }
  1213. XX        else
  1214. XX        {
  1215. XX        GETNUM(cp, octave);
  1216. XX        if (octave >= sizeof(pitchtab) / OCTAVE_NOTES)
  1217. XX            octave = DFLT_OCTAVE;
  1218. XX        octprefix = TRUE;
  1219. XX        }
  1220. XX        break;
  1221. XX
  1222. XX    case '>':
  1223. XX        if (octave < sizeof(pitchtab) / OCTAVE_NOTES - 1)
  1224. XX        octave++;
  1225. XX        octprefix = TRUE;
  1226. XX        break;
  1227. XX
  1228. XX    case '<':
  1229. XX        if (octave > 0)
  1230. XX        octave--;
  1231. XX        octprefix = TRUE;
  1232. XX        break;
  1233. XX
  1234. XX    case 'N':
  1235. XX        GETNUM(cp, pitch);
  1236. XX        for (sustain = 0; cp[1] == '.'; cp++)
  1237. XX        {
  1238. XX        slen--;
  1239. XX        sustain++;
  1240. XX        }
  1241. XX        playtone(pitch - 1, value, sustain);
  1242. XX        break;
  1243. XX
  1244. XX    case 'L':
  1245. XX        GETNUM(cp, value);
  1246. XX        if (value <= 0 || value > MIN_VALUE)
  1247. XX        value = DFLT_VALUE;
  1248. XX        break;
  1249. XX
  1250. XX    case 'P':
  1251. XX    case '~':
  1252. XX        /* this may be followed by an override time value */
  1253. XX        GETNUM(cp, timeval);
  1254. XX        if (timeval <= 0 || timeval > MIN_VALUE)
  1255. XX        timeval = value;
  1256. XX        for (sustain = 0; cp[1] == '.'; cp++)
  1257. XX        {
  1258. XX        slen--;
  1259. XX        sustain++;
  1260. XX        }
  1261. XX        playtone(-1, timeval, sustain);
  1262. XX        break;
  1263. XX
  1264. XX    case 'T':
  1265. XX        GETNUM(cp, tempo);
  1266. XX        if (tempo < MIN_TEMPO || tempo > MAX_TEMPO)
  1267. XX        tempo = DFLT_TEMPO;
  1268. XX        whole = (HZ * SECS_PER_MIN * WHOLE_NOTE) / tempo;
  1269. XX        break;
  1270. XX
  1271. XX    case 'M':
  1272. XX        if (cp[1] == 'N' || cp[1] == 'n')
  1273. XX        {
  1274. XX        fill = NORMAL;
  1275. XX        ++cp;
  1276. XX        slen--;
  1277. XX        }
  1278. XX        else if (cp[1] == 'L' || cp[1] == 'l')
  1279. XX        {
  1280. XX        fill = LEGATO;
  1281. XX        ++cp;
  1282. XX        slen--;
  1283. XX        }
  1284. XX        else if (cp[1] == 'S' || cp[1] == 's')
  1285. XX        {
  1286. XX        fill = STACCATO;
  1287. XX        ++cp;
  1288. XX        slen--;
  1289. XX        }
  1290. XX        break;
  1291. XX    }
  1292. XX    }
  1293. XX}
  1294. XX
  1295. XX/******************* UNIX DRIVER HOOKS BEGIN HERE **************************
  1296. XX *
  1297. XX * This section implements driver hooks to run playstring() and the tone(),
  1298. XX * endtone(), and rest() functions defined above. SVr3.2-compatible copyin()
  1299. XX * is also required.
  1300. XX */
  1301. XX
  1302. XXstatic int spkr_active;    /* exclusion flag */
  1303. XX
  1304. XXint spkropen(dev)
  1305. XXdev_t    dev;
  1306. XX{
  1307. XX#ifdef DEBUG
  1308. XX    printf("spkropen: entering with dev = %x\n", dev);
  1309. XX#endif /* DEBUG */
  1310. XX
  1311. XX    if (minor(dev) != 0)
  1312. XX    u.u_error = ENXIO;
  1313. XX    else if (spkr_active)
  1314. XX    u.u_error = EBUSY;
  1315. XX    else
  1316. XX    {
  1317. XX    playinit();
  1318. XX    spkr_active = 1;
  1319. XX    }
  1320. XX}
  1321. XX
  1322. XXint spkrwrite(dev)
  1323. XXdev_t    dev;
  1324. XX{
  1325. XX#ifdef DEBUG
  1326. XX    printf("spkrwrite: entering with dev = %x, u.u_count = %d\n",
  1327. XX        dev, u.u_count);
  1328. XX#endif /* DEBUG */
  1329. XX
  1330. XX    if (minor(dev) != 0)
  1331. XX    u.u_error = ENXIO;
  1332. XX    else
  1333. XX    {
  1334. XX    char    bfr[STD_BLK];
  1335. XX
  1336. XX    copyin(u.u_base, bfr, u.u_count);
  1337. XX    playstring(bfr, u.u_count);
  1338. XX    u.u_base += u.u_count;
  1339. XX    u.u_count = 0;
  1340. XX    }
  1341. XX}
  1342. XX
  1343. XXint spkrclose(dev)
  1344. XXdev_t    dev;
  1345. XX{
  1346. XX#ifdef DEBUG
  1347. XX    printf("spkrclose: entering with dev = %x\n", dev);
  1348. XX#endif /* DEBUG */
  1349. XX
  1350. XX    if (minor(dev) != 0)
  1351. XX    u.u_error = ENXIO;
  1352. XX    else
  1353. XX    {
  1354. XX    endtone();
  1355. XX    spkr_active = 0;
  1356. XX    }
  1357. XX}
  1358. XX
  1359. XXint spkrioctl(dev, cmd, cmdarg)
  1360. XXdev_t    dev;
  1361. XXint    cmd;
  1362. XXchar    *cmdarg;
  1363. XX{
  1364. XX#ifdef DEBUG
  1365. XX    printf("spkrioctl: entering with dev = %x, cmd = %x\n");
  1366. XX#endif /* DEBUG */
  1367. XX
  1368. XX    if (minor(dev) != 0)
  1369. XX    u.u_error = ENXIO;
  1370. XX    else if (cmd == SPKRTONE)
  1371. XX    {
  1372. XX    tone_t    *tp = (tone_t *)cmdarg;
  1373. XX
  1374. XX    if (tp->frequency == 0)
  1375. XX        rest(tp->duration);
  1376. XX    else
  1377. XX        tone(tp->frequency, tp->duration);
  1378. XX    }
  1379. XX    else if (cmd == SPKRTUNE)
  1380. XX    {
  1381. XX    tone_t    *tp = (tone_t *)cmdarg;
  1382. XX
  1383. XX    for (; tp->duration; tp++)
  1384. XX        if (tp->frequency == 0)
  1385. XX        rest(tp->duration);
  1386. XX        else
  1387. XX        tone(tp->frequency, tp->duration);
  1388. XX    }
  1389. XX    else
  1390. XX    u.u_error = EINVAL;
  1391. XX}
  1392. XX
  1393. XX/* spkr.c ends here */
  1394. XEND_OF_FILE
  1395. Xif test 12412 -ne `wc -c <'spkr.c'`; then
  1396. X    echo shar: \"'spkr.c'\" unpacked with wrong size!
  1397. Xfi
  1398. X# end of 'spkr.c'
  1399. Xfi
  1400. Xif test -f 'spkr.h' -a "${1}" != "-c" ; then 
  1401. X  echo shar: Will not clobber existing file \"'spkr.h'\"
  1402. Xelse
  1403. Xecho shar: Extracting \"'spkr.h'\" \(317 characters\)
  1404. Xsed "s/^X//" >'spkr.h' <<'END_OF_FILE'
  1405. XX/* spkr.h -- interface definitions for speaker ioctl() */
  1406. XX
  1407. XX#define    SPKRIOC        ('S'<<8)
  1408. XX#define    SPKRTONE    (SPKRIOC|1)    /* emit tone */
  1409. XX#define    SPKRTUNE    (SPKRIOC|2)    /* emit tone sequence*/
  1410. XX
  1411. XXtypedef struct
  1412. XX{
  1413. XX    int    frequency;    /* in hertz */
  1414. XX    int duration;    /* in 1/100ths of a second */
  1415. XX}
  1416. XXtone_t;
  1417. XX
  1418. XX/* spkr.h ends here */
  1419. XEND_OF_FILE
  1420. Xif test 317 -ne `wc -c <'spkr.h'`; then
  1421. X    echo shar: \"'spkr.h'\" unpacked with wrong size!
  1422. Xfi
  1423. X# end of 'spkr.h'
  1424. Xfi
  1425. Xecho shar: End of shell archive.
  1426. Xexit 0
  1427. END_OF_FILE
  1428. if test 28226 -ne `wc -c <'sys/unix/snd86unx.shr'`; then
  1429.     echo shar: \"'sys/unix/snd86unx.shr'\" unpacked with wrong size!
  1430. fi
  1431. # end of 'sys/unix/snd86unx.shr'
  1432. fi
  1433. if test -f 'sys/vms/lev_lex.h' -a "${1}" != "-c" ; then 
  1434.   echo shar: Will not clobber existing file \"'sys/vms/lev_lex.h'\"
  1435. else
  1436. echo shar: Extracting \"'sys/vms/lev_lex.h'\" \(587 characters\)
  1437. sed "s/^X//" >'sys/vms/lev_lex.h' <<'END_OF_FILE'
  1438. X/*       SCCS Id: @(#)lev_lex.h 3.1     92/01/10        */
  1439. X/* "vms/lev_lex.h" copied into "util/stdio.h" for use by lev_lex.c only!
  1440. X * This is an awful kludge to allow util/lev_lex.c to be compiled as is.
  1441. X * It works because the actual setup of yyin & yyout is performed in
  1442. X * src/lev_main.c, where stdin & stdout are still correctly defined.
  1443. X */
  1444. X/* note for 3.1: also used with util/dgn_lex.c */
  1445. X
  1446. X#ifdef __GNUC__
  1447. X# ifndef CONST_OK
  1448. X#  define const
  1449. X# endif
  1450. X#endif
  1451. X
  1452. X#include <stdio.h>
  1453. X#ifdef stdin
  1454. X# undef stdin
  1455. X#endif
  1456. X#define stdin  0
  1457. X#ifdef stdout
  1458. X# undef stdout
  1459. X#endif
  1460. X#define stdout 0
  1461. END_OF_FILE
  1462. if test 587 -ne `wc -c <'sys/vms/lev_lex.h'`; then
  1463.     echo shar: \"'sys/vms/lev_lex.h'\" unpacked with wrong size!
  1464. fi
  1465. # end of 'sys/vms/lev_lex.h'
  1466. fi
  1467. echo shar: End of archive 78 \(of 108\).
  1468. cp /dev/null ark78isdone
  1469. MISSING=""
  1470. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 \
  1471. 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 \
  1472. 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 \
  1473. 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 \
  1474. 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 \
  1475. 101 102 103 104 105 106 107 108 ; do
  1476.     if test ! -f ark${I}isdone ; then
  1477.     MISSING="${MISSING} ${I}"
  1478.     fi
  1479. done
  1480. if test "${MISSING}" = "" ; then
  1481.     echo You have unpacked all 108 archives.
  1482.     echo "Now execute 'rebuild.sh'"
  1483.     rm -f ark10[0-8]isdone ark[1-9]isdone ark[1-9][0-9]isdone
  1484. else
  1485.     echo You still need to unpack the following archives:
  1486.     echo "        " ${MISSING}
  1487. fi
  1488. ##  End of shell archive.
  1489. exit 0
  1490.