home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-02-05 | 58.3 KB | 1,490 lines |
- Path: uunet!news.tek.com!master!saab!billr
- From: billr@saab.CNA.TEK.COM (Bill Randle)
- Newsgroups: comp.sources.games
- Subject: v16i086: nethack31 - display oriented dungeons & dragons (Ver. 3.1), Part78/108
- Message-ID: <4449@master.CNA.TEK.COM>
- Date: 5 Feb 93 19:20:15 GMT
- Sender: news@master.CNA.TEK.COM
- Lines: 1478
- Approved: billr@saab.CNA.TEK.COM
- Xref: uunet comp.sources.games:1637
-
- Submitted-by: izchak@linc.cis.upenn.edu (Izchak Miller)
- Posting-number: Volume 16, Issue 86
- Archive-name: nethack31/Part78
- Supersedes: nethack3p9: Volume 10, Issue 46-102
- Environment: Amiga, Atari, Mac, MS-DOS, 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 78 (of 108)."
- # Contents: sys/mac/NHrsrc.hqx sys/unix/snd86unx.shr sys/vms/lev_lex.h
- # Wrapped by billr@saab on Wed Jan 27 16:09:18 1993
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f 'sys/mac/NHrsrc.hqx' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'sys/mac/NHrsrc.hqx'\"
- else
- echo shar: Extracting \"'sys/mac/NHrsrc.hqx'\" \(26186 characters\)
- sed "s/^X//" >'sys/mac/NHrsrc.hqx' <<'END_OF_FILE'
- X(This file must be converted with BinHex 4.0)
- X:$'jPG'KKBfXZFR0bB`"bFh*M8P0&4!%!!!!!!!!!5a*LUJ!!!!!"!!!!4GF!!%6
- XA!!!&1`!!!!!0!"!!,3!`S!)!U!!!!!!!&J!i!#F!iBJB8h4[$'jPG'KKBfXZFR0
- XbBb8#!!!!FR0bBe*6483"!2rrrrm!!(*cFQ058d9%!3$rrrrr!!!!!!!!!!!!!!!
- X!!!!!!!!!TiLmT`!!!!!!!%X5!!$)!6!!!3!!!!!!!!!!#lN!!!!!&3!!!!!!jJ&
- XF!!%!!!!!!!!!!!Zi!!!!!"8!8!"Z!2S"Z!!"!!!!!!!!!!!(e!!!!!!9!&!!EJ$
- Xk!EJ!!3!!!!!!!!!!"p-!!!!!&3"3!'i!qJ'i!!%!!!!!!!!!!!I5!!!!!"8!8!"
- XZ!2S"Z!!!!"`"#!!)!8S!m!!!!!!!!!!!!!!(6@9cFf&RC6J+!!!!(!%Z!!3"8J(
- X+!!!!!!!!!!!!!!C6G'&dGA0V1!S!!!!@!(`!fJ$i!BS!!!!!!3!!!!!!!%di#J!
- X!!"S![J!'!9!"-J!!!!!"!!!!!!!%5@jQEb!i#J!!!#)!+!!S!)`!SJ!!!!!"!!!
- X!!!!06R9XE#"AD@jNEhFJ)6J+!!!!2!j1G@eLCA)JEfBJDf9jFdp$6P3&+LSU+LT
- X-8e4$"dYPH@0[C'9)3PP8"%0SBA*$5%&5"5SU+LSU6&0843!!!#!!+!!S!8S"lJ!
- X!!!!!!!!!!!!,4(9ZCf9[EL"0BA!i#J!!!#!!+!!S!+`"c!!!!!!"!!!!!!!,4'P
- XKCfj[Fh4TBh-i#J!!!!-!!3!!!!!@!!%66@&M)%jPG%KKBfXJ5'9XF-N[2`!!!!i
- X!!JNMGQ9bFfP[EJd"2`!!!!i!"J&6!!*2B`*2F`!"83!!!#J!J!!!!!!!!!!!rrr
- Xrr`%8%N&LEh9d)%eKBb"1CA4)B@0Vb3!!!!!!!!!!A3#"!!!!!!!!!!$rrrrE"%C
- XTE'8*8f&fC5"(B@eP!&-!!!%Y!!!!!""%DA0`E'&j)%p`G'P[ER2*!%3!!!a6CA3
- XJ6h"dD@pZFmN!6`!!!5d!!!!!"&&eDA3!83!!!!!!!%J!JJ!!!!!!!!!!rrrrq`4
- X&C'Pd"&9ZC'm!@J!!!5d!!!!!!d0eG!"B!!!%3fp`H3"$!!!&8'&cG'8!9J!!"80
- XXC@&b!!!!!!!!!!%$!)-!!!!!!!!!!2rrrrm)4AKdC@jNC@333@4UGA0d)%PZGQ9
- XZG'pbH3!!!!!)3fpZGQ9bFf8!!!!!!d4TF!!!!!!+4QpbBf8J6'pMD`"'!!!%5R9
- XYF!!!!!!)6'p[G#"#EhJ!6!!!$de[ER0dCA)J3@*TE'PdH3"0!!!%6Q&YC3!!!!!
- X26fCQCA)J8f&MFQPQD@0P!!!!!!43FQ&j!!!!!!K5G@)J6'&YF!!!!!!$8fPd!!!
- X!!!Y8GA*Z)&9ZC'9KC!!!!!!'9@jdFQ&`!!!!!!a@CA*cD@pZ)%PZCQm!!!!!$PG
- XTEQ4[Gb"$E'9KER9`!!!!!!PADA"P)%CKBf8!!!!!!!!!!)3!%3JMB@4UGA0d$3B
- XMBfKKG!d&)f4TF!d()fC[FQ0P$3BMDR9YF!d')fa[Eh30#50YEfjcG'9b$3BMEQ&
- XYC3d()fpQCQ9b$3BMF(*KH3d&)h*eBJd&)h0TG!d')h4eFQi0##0eER4bBA!0#50
- XfCA*cD@pZ$3JMGfPZC'ph$3BMGfP`C3d!!!!2!!F"D3%5!4!!!43""!&!!!!!G`#
- X%!!!!!!!!!!$rrrr["%eTFf-*5@jfC@jdEh*j!%N!!!e5C@4bBAFJ8f0bC@9Z!&)
- X!!""3FQ9fD@peFb"0CA0cB@GP!&!!!!%Y!!!!!!K8C@aPF'pbG!"8!!!%5fPMD`"
- X,!!!09'pRCfaP)&"TBfYeF!!!!!!!!!!!J!!!$rm!!!!!$3$r%Im!!!!0d!m4(`!
- X!!!$G$a%4m!!!!!hI%4(`!!$r$phrmI!!!2rrrG!2!!!!m4%Ih3!!!!$a%4m0d!!
- X!!2%4(`$G!!!!$r%I!!h3!!!!rr!!!0d!!!!!!!!!$G!!!!!!!!!!h3!!!!!!!!!
- X0d!!!!!!!!!$3!!!!J!rrrrrrr`!!$mc-c-c2m!!2c-c-c-r2!!r-c-rrcrr`$mr
- Xmca(mc2!2crr2%4r-m!r-rrm4(mc`$mc2rrrrc2!2rrrrr-c-m!ra%Irrc-c`$r%
- X4r2rmc2!2ca(mcrr-m!r-rrc-rrc`$mc-c-c2rr!2c-c-c-crm!rrrrrrrrr`!!!
- X!3!F!6i"R`$IJ(q"2i2j!r`$jJ2M!I'!i-!!B!!`!"J!#"`"2J'I!0q!Ii%rJrN$
- Xr!2Q!q-"mB$J`!"J!$!!'!!)!!!"!Ir"!'%!83rjEiPhb6r*AmRq#Im*qiPpb6MT
- X!(N!1Irjrm(riIrarrRrqIrjrrRrqIrjrrRrqIrjrrRrqIrjrrJ!!!3!!!!!!!"m
- X!!!"r`!!JIq!!1$r`!"3rm!!52rJ!#6ri!!6rq!!#IrJ!!6ri!''Iq!$rc$!!rq3
- X!!2rb!!$rq3!!rq5!!2rL3!"ri5!!Iq#3!!!rm%J!(r!N!!I!%J!!!!N!!!!%J!!
- X!!N!!!!%J!!!!N!!!!!")!!!!*!!!!"3!!!!)!!!!!!!I!!!!Im!!)(rJ!$Jrm!!
- XF2r!!(Mri!!mrq!!(rrJ!!rri!!(rq!"KrrJ!rr``!2rm!!$rrJ!!rrm!!2rRJ!$
- Xrim!!Iq(J!(rJm!!rm(J!(r!m!!I!(J!!!!m!!!!(J!!!!m!!!!(J!!!!m!!!!(J
- X!!!!m!!!!(!!!!!J!!!%!(rrq!"!!!`!3!!+!%!!#3"!!!L!3!!)3%!2L#"!(qrJ
- X4Kr`)%82m#"%MrJJ3Nri)%%rq#"!RrJJ3%ri)%aQ-#"ImJ!JArN!)&rmJ#"ImN!!
- X)&ra)#"2m*!J6rK))%Ii*#""m")J3!!*)%!!"+"!!!*J3!!")%!!!+"!!!"JIrrr
- Xi(rrq!"rrr`!Irrq!(rrr`"rrrq!Irrr`(rrrq"rrrrJIrrri(rrrq"rrrrJIrrr
- Xi(rrrq"rrrrJIrrri(rrrq"rrrrJIrrri(rrrq"rrrrJIrrri(rrrq"rrrrJIrrr
- Xi(rrrq"rrrrJIrrri(rrrq"rrrrJIrrri(rrrq"rrrrJ!!!)!!!!!!!!!!!!!!!!
- X!!!!!!!!!!!!!$rrr!!!!!!!!!!!!!!!!$r%4%Im!!!!!!!!!!2!!!!m4%4%4m!!
- X!!!!!!!$rm!!!m4%4%4m!!!!!!!!!$pm!!2%4%4%I!!!!!!!!!!rGm!$a%4%4%I!
- X!!!!!!!!!rGm!m4%4%4(`!!!!!!!!!!rGrr%4%4%4m!!!!!!!!!!!rGm4%4%4%I!
- X!!!!!!!!!!!rGm4%4%4(`!!!!!!!2m!!2rGmIrrm4m!!!!!!!m4rrm4rGr`!!r`!
- X!!!!!!2%4%4%4rGm!!!!!!!!!!!$a%4%4%4rGm!!!!!!!!!!!m4%4%4%IrGm!!!!
- X!!!!!!2%4%4%4m!rGm!!!!!!!!!$a%4%4%I!!rGm!!!!!!!!!$a%4%4(`!!rGm!!
- X!!!!!!!m4%4%4m!!!rGm!!!!!!!!!m4%4%4m!!!rGm!!!!!!!!!ra%4(r!!!!rGm
- X!!!!!!!!!$rrr!!!!!!rGm!!!!!!!!!!!!!!!!!!!rGm!!!!!!!!!!!!!!!!!!!r
- XGm!!!!!!!!!!!!!!!!!!!rGm!!!!!!!!!!!!!!!!!!!rGm!!!!!!!!!!!!!!!!!!
- X!rGm!!!!!!!!!!!!!!!!!!!rGm!!!!!!!!!!!!!!!!!!!rGm!!!!!!!!!!!!!!!!
- X!!!rI!!!!!!!!!!!!!!!!!!!!m!!!!!)!!!rrrrrrrrrrrrr`!!!!!!!2c-c-c-c
- X-c-c-r`!!!!!!$mc-c-c-c-c-c2c`!!!!!!r-c-c-c-c-c-cmc`!!!!!2c-c-c-c
- X-c-c-r-c`!!!!$mc-c-c-c-c-c2c-c`!!!!r-c-c-c2rrr-cmc-c`!!!2c-c-c-m
- X4%4rmrrrrm!!!$mc2r-c2%4%4rmc-c2!!!!r-cmr-c2%4%4r-c-c`!!!2c-r-r-c
- Xa%4%4r-c-m!!!$mc-r-r-m4%4%Ic-c2!!!!r-c-r-rr%4%4(mc-c`!!!2c-c-r-m
- X4%4%4r-c-m!!!$mc-c-r-mIrrrrc-c2!!!!r-rmc2r-rmc2r-c-c`!!!2crrrrar
- X-r-c-c-c-m!!!$mm4%4%4r-r-c-c-c2!!!!r2%4%4(rr-r-c-c-c`!!!2ca%4%4r
- X-r-r-c-c-m!!!$mm4%4%Ic-r-r-c-c2!!!!r-m4%4(mc-r-r-c-c`!!!2c2%4%4r
- Xmc-r-r-c-m!!!$mc2m4%Ir-c-r-r-c2!!!!r-c-rrrmc-c-r-r-c`!!!2c-c-c-c
- 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
- X-c-c-c-r-m!!!$mc-c-c-c-c-c-c-r2!!!!r-c-c-c-c-c-c-c-r`!!!2rrrrrrr
- Xrrrrrrrrrm!!!!!!-!&S!EJ$Z!C)!J84%!!!!6!!#!!!!!!"i!-B!LJ%3"!*25`!
- X!!!!!#J"'!(-"%)JF3fpeE'3JEQpd)&ib)'*PBf&eFf8JAM!Z)#"H-3!!!!!!#J!
- X8!#S!0+!#!!!!!!%!!!!!!!!!!!!rrrr`)!!!'#!(`"JJ$r!B)`ri'#+(q"JL4r`
- XB)5Im'##Ir"JJ6r`B)#Im'#Bc'"J[q3!B,rb!'#rq3"J[q5!B,rL3!"JRq%JB*r`
- XN'#2m%KJJq!NB)!!%Q#!!!PJJ!!%i)!!!Q#!!!&JJ!!!i2rrrq"rrrrJ!!!!!!!!
- X!!!!!!!!rrrr`2rrrq$rrrrJrrrri2rrrq$rrrrJrrrri2rrrq$rrrrJrrrri2rr
- Xrq$rrrrJrrrri2rrrq$rrrrJrrrri2rrrq$rrrrJrrrri2rrrq$rrrrJrrrri2rr
- Xrq$rrrrJrrrri2rrrq$rrrrJrrrri(rrrq!!!!!!!!!"!!!"rr%1'@mCIjNrQGqC
- XrKRr'IZCHGNiq3"j!$Rrq2ri!!(rmIrjrrRrqIrjrrRrqIrjrrRrqIrjrrRrqIri
- XrrJ!!!J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$rrrrrrrrrrrr
- Xrrrrr!!!!r-c-c-c-c-c-c-c-cr!!!2c-c-c-crrrc-c-c-r`!!$mc-c-c2%4%Ir
- X-c-c2m!!!r-crc-ca%4%4r-c-cr!!!2c-rIc-ca%4%Ic-c-r`!!$mc2hIc-m4%4%
- XIc-c2m!!!r-c2hIc2%4%4(mc-cr!!!2c-c2hIm4%4%4r-c-r`!!$mc-c2hI%4%4%
- XIc-c2m!!!r-c-c2hI%Ira(mc-cr!!!2c2r-crhIr-crc-c-r`!!$mm4rr%IhIc-c
- X-c-c2m!!!r2%4%4%IhIc-c-c-cr!!!2ca%4%4(rhIc-c-c-r`!!$mm4%4%Ic2hIc
- X-c-c2m!!!r2%4%4(mc2hIc-c-cr!!!2c2%4%4r-c2hIc-c-r`!!$mca%4%4r-c2h
- XIc-c2m!!!r-cr%4%Ic-c2hIc-cr!!!2c-c2rrr-c-c2hIc-r`!!$mc-c-c-c-c-c
- X2hIc2m!!!r-c-c-c-c-c-c2hIcr!!!2c-c-c-c-c-c-c2hIr`!!$mc-c-c-c-c-c
- X-c2hIm!!!r-c-c-c-c-c-c-c2hr!!!2c-c-c-c-c-c-c-c2r`!!$rrrrrrrrrrrr
- Xrrrrrm!!!$rrrrrrrrrrrrrrrrr!!!!!!!!!!!!!!!!!!!!!!!!!!!!`!0J#+!)N
- X#'`#!4%3!!!!L!!%!!!!!!$3"53")!B-%!Np,!!!!!!!'!$J!4J%fL!*H-!!!!"J
- X!@J"H!1J"T`!&!!!!!!!!!!!!JJ!"F!S!!!!B!$)!-J$p!@%!"3!!!!!!!!!!!)-
- X!,A!+!!!!'!")!()!pJ&r!!8"!!%!!!!!!!#%!#G`#J!!!"J!3J"F!--"e`!&!!!
- X!!!!!!!!!K`!!F!S!!!!B!%)!A!$$!GF!"3!!!!!!!!!!!)B!!(!+!!!!'!"#!&`
- X!``(A!!8!!!!!!!!!!!#&!!"`#J!!!&)!"!!!!!!!B`%Y!(F"C`3$@@9c!!!!!!!
- X!B`$R!(F")33#6Qm!!!!!!!X!6!"8!@D)!Pi`!!!!!!!-!"3!,!!dS!)!!3!!!!!
- X!A3%S!(d"5)!!!!!!C!!&!!!!!!"M!5d!G`&R"!0CCA-!!!!!!!"M!1F!G`%K"!*
- X1E`!!!!!!B`#K!(F!f`3%8A9TG!!!!!!!#`"-!&3"CSJ#AM!!!!!!!!`!&!!X!$5
- XJ!J!"!!!!!!"G!5J!I3&)J!!!!!"f!!B!!!!!!'-",3"h!@F%!ePPF`!!!!!!!'-
- X!j`"h!5%%!Nj[!!!!!!"M!+%!G`$E"!0"E'`!!!!!!!"M!&X!G`#9"!44G@Pd!!!
- X!!!!,!%`!9!&QL!*H-!!!!!!!$!!8!#`!0+!#!!%!!!!!!&m"+3"r!8Q!!!!!!"J
- X!3J"F!--"e`!&!!!!!!!!!!!!L!!!F!S!!!#%!!F!!!!!!'-",3"h!@F%!ePPF`!
- X!!!!!!'-!j`"h!5%%!Nj[!!!!!!"M!+%!G`$EN!!!!!!!!!"M!&X!G`#9"!0"E'a
- Xd!!!!!!"M!"8!G`"2"!44G@Pd!!!!!!!,!%`!9!&QL!*H-!!!!!!!$!!8!#`!0+!
- X#!!%!!!!!!&i"+!"q!8L!!!!!!')!"3!!!!!!DJ$j!(i"-`3#6dX!!!!!!'S!T3"
- Xq!0m%"N0KEQ0PE!!!!!!!#J"9!$S"1iJ#AM!!!!!!!%3!9`"8!6B3!!!!!!!!#J!
- XF!#S!2+!#!!%!!!!!!'3!p!#%!45!!!!!!AJ!%`!!!!!!U`$M!,m"(33#6dX!!!!
- X!!+X!QJ#r!03%"N0KEQ0PE!!!!!!!$!!B!"i!N!!'"N&NDR9cG!!!!!!!(J!B!$!
- X!N!!'"%0SBA3!!!!!!$!!'!"#!*!!"J0%DA!!!!!!!!"#!"J!9!#3!!B&4QpbBf8
- X!!!!!!!"8!"J!CJ#3!!B%5R9YF!!!!!!!CJ!B!(J!N!!'"%a[Eh3!!!!!!(J!'!#
- X+!*!!"JG0EfjcG'9b!!!!!!!!LJ!B!*`!N!!'"%jKE@8!!!!!!*`!'!#Z!*!!"J9
- X2CQCPFJ!!!!!!!!`!QJ!H!4)'"&"bBAN!!!!!!"i!QJ!`!4)'!e*eBJ!!!!!!!$!
- X!QJ"#!4)'!e0TG!!!!!!!!%)!QJ"8!4)'"&4eFQi!!!!!!&3!QJ"Q!4)'"P9ZG(*
- XKF!!!!!!!CJ#D!(J"%JB(9Q9bFfP[EJ!!!!!!!(J!QJ#+!4)'"PGTEQ4[G`!!!!!
- X!LJ#D!*`"%JB%9fP`C3!!!!!!TJ$I!-B!ri!!!!!"-J!1!!!!!!#0!+J!S3$L"!*
- X25`!!!!!!M3!a!+%!D`3%8A9TG!!!!!!!$J!9!#!!I`B-3A*MD'9[E'pRDA0d!!!
- X!!!!J!"8!-J"r"JP#BA*LBA*TB@i!!!!!!!!b!"8!4!"r"JG$BACPE@&Z!!!!!!!
- X!4!!9!&B!I`B$4@aQ!!!!!!!!9J!9!'J!I`B'5'9KE'9b!!!!!!"S!"8!HJ"r"JC
- X,EQPRD(3!!!!!!!i!M3!J!2F'"P"bD@9cG!!!!!!!)!#0!$)!p`B&8QpRG@8!!!!
- X!!!!b!)d!4!$h"JG6B@eeFQ&T!!!!!!!!4!#0!&B!p`B(9'peFQPcG!!!!!!!!&B
- X!M3"S!2F'#&CKE'YjFQPP!!!!!!"S!)d!HJ$h"JCADATKFQ3!!!!!!)J!T!#S!-5
- X!!!!!!"J![!#D!4X"F`!&!!!!!!!!!!!!L3!!D!S!!!"X!!8!!!!!!%)!63"@!)F
- X%!Np,!!!!!!"#!!X!9J"&"!C$B@jMC@`!!!!!!!F!0!!h!05)!Pi`!!!!!!"%!*J
- X!9!$-%!P&C'Pd)&4PH(3!!!!!!!!)!!S!+!!US!)!!3!!!!!!23"*!&d!DB!!!!!
- X!J!!!!!!!!!!!$rrrrrrrr`!2c-crr-c2m!r2r2%Ic-r`$mrrm4(mcr!2c2ra%Ic
- X2m!rrrrrrr-r`$r%4rrc-cr!2%4(rrmc2m!ra%Icrr-r`$mm4r-rrcr!2c2rmc2r
- Xrm!r-c-c-crr`$mc-c-c-rr!2rrrrrrrrm!$rrrrrrrr`!!!*L*!!!!!!!2i!"J!
- X!rrF!"J!,!lX!#3!#!!!!2`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- X!!!!!!!!!!!!!!!!!!!!!!!!!!0J!!!!!!!!833!!!!!!+8!!!$!!!"S!!!)B3!9
- XV@)P!"q!j4##!3!59`(!F!F)8!"8!#2`2r`!IJ!!!"cJ#!!!!!!!#!!!!jJ!3!
- X3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
- X`!)!KJ%!3+!SJ!%!JL!!!"J!%%L%f`!!!)SJ!!"q)P!"D!T4##!3!593&!8!8)
- X8!"8!#2`2r`$3J!!!!N3&!#mm!!"#!$!!Q3!!E91Ha-)!!&bj`[Zqj`!!jc[1p
- XrlSm-B4Llc[1r'-BaraS#"!!3'#%``!!!!!)!!!!!UDlj&+%N#P#YA1q"kP%846S
- XJP(a#4#@Ll%!#55!&DeL*3!@J+83JJ%!%P8"3&!&!!9!"3JMm$rm"-!2J!fG&a
- X!"I`J%KSJ")!*)26IeV+5U3!'2'*S3$'))*'-BaM#%BS-SEc'-Ba*'-94$3d""!!
- X3)#!33!!!!!)!!!!!UY(i!!!B!!!!)aJ#J!!!!%BNJU*!!!!c-J!#UJ!!!IL*3!@
- XJ+83JJ%!%P8"3&!&!!9!"3JMm$rm#-!%J!*V')J2I`rN5SN$,Jj3*@&8Y3KF3!
- X+D%+[H$'0Ad(XB`M#%)S0)9V'-B`*'-54&)J!IjchFrdbI@GjpRr'0BaqU""6R[H
- XpcR15BaJkMR1M'-BZjq,RcSfV-N!"9@!&DeMj3IfrkA`JJ%!%pArIprprPIJ9q"A
- XiMm$rpf8(b2b)Vq,Ybr`JI-JJFh`TrTH2Z8JKVmq+U)dJa%k)J#+[r3MldrS1)4R
- X(dI1*'-5+*)J!M'-BT'-dDjM'1B*'094&"""8BaM'-Ba5IrpAdBaM'-BeJ6a)dBj
- XQl)rq'@Q3!!(rMhiaXBr(rrrrrjFc$$--)(i(rbIq*rrrrrLP!S88L+aM'X[m2j%
- XS2iKm3!k3!)89Y5%K!"-T!r$%NAKI424M#-)4LSdK'-B4L%NBe)4%5!#-B4qNBca
- XV'-B`FNBe*%LS%(IM'-BIrp*M'(k4M'-BaM5(j%M4M')"#!3KmNeV@2P,rEhi2%!
- X#3!6eprphrhq"q8(p&IK2rr`)S`+*&)KdBah6r#!5'#"`Id!1N!!!9V)5!3!5+L)
- XSa*%)))#%BaM#%BU-S4M'%Ba*&@e%K%J!R'%B*'-bDaM'-!T09943U"%N*cR1%)3
- X5BaK5NBaR1-BeL5j*dCaMraJ%3(*)!IL*5L@P!!"!!N!%P"3"9!&!!#&!*43J6rr
- Xm#+-#Na5)*&838r`rJ!JNJ$L!!*!!J$T0$!!3BFrF*cL1G3!%G(c[IJk2G(mBZJk
- X,L1*'*2iir'qHpk2M-@XAHI$aY)U,rUJ1)pV@YHpldQ-IhZjcQYHjc[%N4XjXBJ$
- XJ!("TP@YBL8SPT3!!3!*!"*38!93"3!!K3#88)%rrr!GY!VlR5(1fi$hm)(rj)!!
- X!J!$`!"!!!!!3)!!!!!!!!3!!!!!!!!!!!!!!!!%!!!!!!!!J!!!!!!"!)!!!3#!
- X!!!!!3(!#F!!!!)!!!!!!!!!!!!#!"!!'3!!!!!!!!!!!!!(iL8SPT3!!3!*!"*3
- X8!93"3!!K3#88)%rrr!!J!!!%!!!!!#(ri!!*)!!!!!!!!!!!!!!J!!!!!!!!!J!
- X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1!`!!!3#!!!!!$J!!%!!!!!3!!!!!!!!!
- X!!!F!!!!"J!!!!!!!!!!!"@YBL8SRj`!!3!*!"*3F!G`"`!!K3#88)%rrr!!!!!!
- X%!!!!!%!!!!!)`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!3!%!!N!$J!6!"J
- X!'J!G!#!!*3!U!#`!-3!b!$B!1`!p!%)!4`"-!&%!9J"E!'!!C3"Q!'J!D`"`!(-
- X!H!"p!))!K`#-!*%!PJ#E!+!!T3#S!+d!XJ#h!,`!`3$'!-X!d!$9!0S!h`$N!1N
- X!lJ$c!2J!r3$r!3-""3%)!3i"%!%9!4S"(`%N!5N",3%b!6F"1!%l!8!"3J&(!8`
- X"83&@!9X"B!&P!@N"EJ&c!AJ"I3'#!BF"LJ',!Bi"N`'6!CJ"R3'L!DF"V!'a!EB
- X"Z`(!!F8"bJ(0!G!"dJ(A!G`"i3(Q!HX"m!(e!IS"r`)%!JN#$J)6!KJ#(3)L!LF
- X#,!)a!M-#1!)p!N)#4`*,!Nm#9!*C!Pi#C!*U!QX#F!*e!RS#I`+%!S8#L3+0!T)
- X#P`+E!U!#S`+S!Ud#XJ+f!VS#[3,$!XN#c!,5!YJ#f`,I!Z-#j`,Y![-#p`,p!`-
- X$#3-2!a8$'`-I!b)$*3-T!bm$03-j!c`$3J0)!dX$6J08!eS$A`0P!fS$E`0e!hS
- X$J!1&!iS$M`18!jN$R`1P!kX$X31f!lN$[!1r!m-$b!20!p%$eJ2A!p`$i!2N!qF
- X$l3!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B
- X!"J!'!!B!"J!'!!B!"J!'!!B'"J)'!3B!"J!'!!B!"J)'!3B#"J!'!!B""J!'!JB
- X""J!'!JB!"J!'!!B!"J!'!!B!"J!'!JB""J%'!!B""J!'!!B!"J!'!!B!"J!'!!B
- X!"J!'!3B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!JB""J)'!3B
- X!"J%'!!B!"J!'!!B!"J%'!!B!"J)'!!B!"J%'!!B!"J!'!!B!"J!'!!B""J!'!!B
- X!"J!'!!B!"J)'!JB""J!'!!!!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!3B""J%'!!B
- X!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B#"J!'!!B!"J!'!3B
- X""J!'!!B!"J!'!!B$"J!'!!B!"J!'!!B$"J!'!!B!"J!'!!B!"J)'!!B!"J!'!!B
- X!"J-'!!B!"J-'!!B!"J-'!JB#"J)'!!B!"J)'!!B!"J!'!!B!"J!'!JB$"J-'!JB
- X!"J!'!!B$"J!'!!B!"J-'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B
- X!"J!'!!B""J%'!`B!"J!'!!B""J!'!JB!"J!'!!B""J!'rrm!!![HN!!!!!!!r`!
- X(!!$rr3!(!!m%j3!-!!-!!!"#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1!!!!!!!!!!!!!!!!!D!!!!
- X!!!"9UeBL8!(i$P%)%!)!#)T`"`"`!F%&!!#N!!S)%2i$rrJ!!!!!!!!!!!!!!!!
- X!)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- X!!!!!!!!!!!!!!!!!!!!!!!!&4%!!!!!!#P!!!!`!!!X!!!!JJ!!!!IiL8!&S#P%
- X)%!)!#)T3"3"3!8%&!!#N!!S)%2i$rrJ!!!!!!!!!!!!$`!!!)!!!#Q!!!"!!$!!
- X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"`F!!!!!!!!!!!!!!!!!!!!!!F!!!
- X!!!B!!!!!4)!!!!!!!!!!!"!!!!!!!!!JJ!"9UeBL8!&S#P%)%!)!#)T3"3"3!8%
- X&!!#N!!S)%2i$rrJ!!!!!!$J!'!$d)!!!)!!!$C!!!08j,&)J!!,PcKI0pcJ!!F!
- Xlc[Iqk2$'%BZmlc[aM'-Ib")!J3!%"JK-!!!!!!!!!!!!+QZ!)J#*!3#!Tc[JH`#
- X#)!k)$4m35)6B[F3!)SS!!!(q)P!"D!T4#"!#!!L+8!8!8!&""3!!T!!+#"$q!rr
- Xi$[Jq!!!4cL!"r#!!)#!$!$NJIGr@XP+S!!-H-633'-3))L"'-B`K'+$+'iaM'-5
- X4M'-3b"8!33!%#!K--!!!!!#!!!!!+V4845K*!T4,@-B!T*4&%9')%+L3!*%*D-B
- XN!#55!&@V9L*3!@J+83J3!J!)LP!&!&!"338!!+3!#JJ3rJ2rq"&))J!ENM%J"I`
- XJ"%`J")!T6d698Y*KF3!&&8)"M%%"![4M'-)3LJdKA-BaM!NBaM%-3BJ!%!"!J
- X)""!!!!!!J!!!!#S%3!!!"J!!!!M'!+!!!!!4L4(iN!!!!!c')!!))!!!!IiL8!&
- XS#P%)%!)!#)T3"3"3!8%&!!#N!!S)%2i$rrYa3"!!*$Sa%!Am2b+5*!5!+Ip%K6(
- X8)A%!"63QPl`R4UI)8-I3M#%)S1)4V'-B`*'-94&%%!!IjchFrdbIHGjpRG'0Baq
- XU"#,R[HpcR15BaJkMR1M'-BZ3!%Ljmk0UaL3!&NTD9DY@2P"rErTI#"!#!!MkArh
- Xrhrprj6q!TrJ+Ia$q!rrmNNI)r%4'-AJGr#!K8L",1#!24)qBL#'[`!P83IKL5-E
- X!"*Eq-)qp2k$#%Cap(cL4M%LL3K!!)aM'+4M0'XBaMQ+4M984533M'-BaM'-8Q-I
- X9r'-BaM'0HIm50'1C[F6rkCUP!!(ripq-E'2arrrrrrq,aM"JaJ`3(m"rr%IrL2r
- XrrrrmNN+&*%4(mBlVr$rk-$q`I#!24)899#%K$iQ8J4"L5,`Rb*E'-)`K'+$L%Ba
- XK')54M&4%3K!!)aK(k4M1'XBaM&b4M8N5+J3Mq-BaKrrdRriAT'-BaM'0%%J50'-
- XBJ!L!35Y#eDY@2P,rEhi2%!!L!!MkI[rlhrpri$q8"rd+I`Mrrr`$F8+**%4'-Be
- XVr#!N%5")IL!24!!9XU%"!"%9!4"L5)33%"I'-)`K'+M5%BaK')54M@*)34!!)aK
- X'#4M0'XBaM!+4M8N8+J3M#-BaK#%%Q-B8T'-BaM'0%NN50'-Brr#!3Rp#J!(q)P+
- X*D8!!%!!L!!L+!S!+8!&!!!38!%8+#!Mrrr`!%8+4*%4'+SlVr$mJm55`ID!24)"
- X@X4)!%&%@%44L5)U))*!!4M'-)4LSbK'-B4M%N9EL5%%3!#FBaLNBc*V'-B`LNe9
- X9'#S%CaR1FiaK&*M'&D4M'FiaM9*,NR4R')!4!!3+T9@V9L*5L@P!!"!!)J!)LJ+
- X!#P!"3!!%&!"JJ)rrrm!"Sb6%1LU)+r`J"a$!!$KJ!%5!1Nk5!""Jjqi6R%F
- XbJ!#24mlhi1Mh4r',S1LiML4L6m#3!(mEjch)q-aDaGjm('dLS[qU!jVQYDecRZ5
- XBaqklR1DelR1m54'cQaL!$J!2#PS!!IiL8SPT3!!3!#)!#)S#J!T3!8!!""3!43S
- X)#2rrr!!@3Vl(3K(EF"hri2J3!!!!)!"p!"!!$!!3)!!!!!!!!)!!!!!!!!!!!!!
- X!!!"!!!!!!!"`m!!!!!!!%!J!!"!)!!!!!"!F!3!!!!!J!!!!!!!!!!!!)!%!!4!
- X!!!!!!!!!!!"9UeBL8SPT3!!3!#)!#)S#J!T3!8!!""3!43S)#2rrr!!3!!!%!"!
- X!!"(i!!!3!!!!!!!!!!!!!!!J!!!!!!!!!3!!!!!!!!!!!!!!!!!J!!!!!!!!!!!
- X!!!!"%!J!!"!)!!!!!4!!!3!!!!!J!!!!!!!!!!!!)!!!!H!!!!!!!!!!!!!!!Ii
- XL8SPT3!!3!#)!#)S#J!T3!8!!""3!43S)#2rrr!!!!!!%!$J!!"!!!!!3!!!!!!!
- X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!i$!!!!!!!!!
- X!!1!!!J!!!!"!!!!!!!!!!!!"`!!!!!!!!!!!!!!!!!"9UeBL8SRj`!!3!#)!#)S
- X$J!j`!F!!""3!43S)#2rrr!!!!!!!!!!!!!!!!!!3!!!!!!!!!!!!!!!!!!!!!!!
- X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- X!!!!!!!!!!!!!!3!%!!N!$J!6!"N!'J!G!#!!*3!U!#`!-3!b!$F!2!!q!%-!5!"
- X0!&)!9`"F!'%!CJ"R!'N!E3"b!(B!H`#"!)B!L`#3!!#9!*S!R`#N!+N!V!#a!,B
- X!Z`$!!-8!bJ$2!03!f3$H!1-!k!$Y!2)!p`$m!3%""!%*!3`"%3%B!4S"(`%N!5N
- X",J%c!6F"2!&"!8)"43&+!8`"83&@!9X"B!&P!@S"E`&c!AJ"I3'#!BF"M!'4!C3
- X"P3'B!Cd"R3'L!DF"V!'a!EB"Z`(!!F8"bJ(2!G3"e`(D!G`"i3(Q!HX"m!(e!IS
- X"r`)%!JN#$J)6!KJ#(3)L!LF#,!)a!MB#1`)p!N)#4`*-!P%#9J*E!Q!#C3*U!R!
- X#GJ*h!R`#J3+)!Sm#PJ+A!TX#R`+N!UN#V3+b!V8#ZJ+r!X3#b!,-!Y!#e`,H!Z)
- X#k3,`![3#q3,q!`-$#J-4!aB$(3-N!bX$-J-j!d!$430*!dd$8J0C!f!$C!0S!fm
- X$GJ0k!hi$K31,!j!!!j8$QJ1I!k8$UJ1a!lB$Z`2!!m8$bJ22!p8$f`2J!q8$k!2
- XV!qm$m`2i!rd%!33'"!F%$!33""3%'!3B""m!"`!(!!F!"`!(!!F!"`!(!!F!"`!
- X(!!F!"`!(!!F!"`!(!!F!"`!(!!F!"`!(!!F!"`!(!!F!"`!(!!F!"`!(!!F$"`)
- X(!3F""`%(!!F$"`)(!JF""`%(!JF""`-(!3F""`)(!3F""`%(!3F""`%(!3F""`-
- X(!JF""`%(!JF""`!(!3F""`%(!3F""`%(!3F""`)(!3F""`%(!3F""`%(!3F""`%
- X(!3F""`%(!3F""`%(!3F""`)(!3F#"`%(!!F$"`%(!3F""`%(!3F#"`%(!3F$"`%
- X(!3F#"`%(!3F""`%(!3F""`%(!3F""`%(!3F""`%(!3F#"`-(!JF""`!!!3F""`%
- X(!3F""`%(!3F""`%(!3F""`)(!JF#"`%(!3F""`%(!3F""`%(!3F""`%(!3F""`%
- X(!3F""`%(!3F""`%(!`F""`%(!3F""`%(!3F""`%(!3F""`%(!`F""`%(!!F!"`!
- X(!`F!"`!(!!F!"`!(!!F#"`!(!!F!"`!(!!F$"`!(!!F$"`!(!!F$"`)(!JF#"`!
- X(!!F#"`!(!!F!"`!(!!F!"`)(!`F$"`)(!!F!"`!(!`F!"`!(!!F$"`!(!3F""`%
- X(!3F""`%(!3F!"`%(!3F""`%(!3F""`%(!3F""`%(!JF#"`-(!!F""`%(!3F""`-
- X(!3F!"`!(!3F!!3!(rrm!!!"#!2!!P`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!3!"!!N!!%Z*!!`!!%Z-!!!!&J!+@APEDea
- Xe9QKAEeKX8f*8DP9Z8L`!!!!@!!TC@9Y,A&9@5&G[@%a63P4+98j5,!!!!%*J!!#
- XB!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- X"!!%!#3!!1!N!$!!!1!`!!!M#N!!!!!!!l`!+!!$rpJ!+!!`$C`!+!!)!!!!d!!!
- X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
- X!63!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(i(!!!!!!!!!F"`(!(!!!!!
- X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- X!!!!!!!!!9%#@8S!!!B!!!!!!!!!!!!!!!!!!!!!!!!!#S!!!!!!@J8!!!!!!J!"
- X3&!8!8!!!!!!!!!!!!!83!-$!!!#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"aJ!
- X!!!!!!!!!!!!!!!!!!i!$J!!!#3J@3*%"N!"54!8N3%`!1!!"iH!!!!!!!!!!!!!
- X@J8i!!!!0!!"3&!8!8!!"98!!!!mm!0qjr58P!!#jGmAcIFi!!Bi6cZIlS`aL$Ph
- XRHGq-B-Br3S##!%$#%aJ!!!!%!!!!"8dK(IPd8*9TJ3UQED3UQN+TmN0%$h)5&iY
- X!2RDJ!)JcrjEj83!!S!N!!&H8"3"3!!+@3#*!(m2ie9C*4K)3!8H)M33'-33584)
- XaP%4M$+-HBaM'*)aJaL-M3%)!33)"#!!!!!3!!!!&9L%M'Ba!!!!!!!!!!!!!!!"
- X5j%(9MFc+h!43L!3N9)NTGXpJJ$3!%35!A2B&JGJ!!UU)8!qI``L2dP##(j!!!88
- X*&HJ+-D[SCUS`M%3M$5+YBaM'")a9+88L!"ZCfjqh,fjZHhmaJaRe3(+K&BaGhGh
- XCQC[fjQCQQCP09$[eM5d+U$j3QU4#r*5*4ZaJ[NLJ%lL%cF2mr`YJ!!!!LM"I``L
- X&1EP5%Rcb441N(`R2%!5UUp#2G2m1)NeMk2R%LT83L4)!"QCP*P0-QCQFK5T8U5J
- XJFU(9M'CQCQCQC9+CQCQCQ8&14r@ec3U)#2bS(i%NT%PfVq$*@6qK48PpI`h$h*!
- X!!!!r"M$r``L!&'BL&4!#45"q'*)K#qNUrM#-4'10)JcM#0!NLSSSN4)!(Q*p*P1
- X-QCQBC5T8589!rq%6M'CQCQ2rr9+CQCQCQ3&81qq0,-J!2T!!bU4#r+5*&UJ46fS
- XLS6P5"3(GIP6rr!!!LM"r``J!9+C5%"!%484&'*)L""!R4M'84'1-SJcM#XSNL3T
- X%N3S!*QCK*P0-QCQB&53SUB9!M'-6M'CQCQBL)9+CQCQCQ3$NKF@+%K!!%4#)"#3
- XNT5N@U!T)5Q*"3LN&!&8!9)!!!!K5,jr$#)!j'BNJ!3`jqi6R%FbJ!4"(cZI$Sh4
- Xq$&d(4F4a#N5I#MmIQGNH8bbCERMLj#NAp8#-AI&cRGhGfGQG8TCQCRGh!%p%"E(
- XKi!!"(h+rrbGEk4Di'ckaS%%$j)F!93"6i!!!!#(SRm2i!"!!!-!"!!!!!!!!!#!
- X!$J!!!!!!!!!!!!%!!!!!!!''!!!!!!3#!!!)%!!!!!%$J!!)!!!!!!!)!!!!!!!
- X!!!!!!$J!!!!!!!!!!!!!"!!!(i!!!!!!!3!!!!"A!(!!!!!!!#!IrJ!!!!!!!!)
- X!!!!!!!!!3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'!`!!!J3!!!!"J!!!"!!!!!
- X!!"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%!!!!!!!!!!!#!!!!!(!!!!!!!!!"`!!
- X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%!"!!*!!i!&J!G!"i!)3!N!#N!,J!`!$3
- X!03!j!$i!3!"&!%S!6`"8!&N!AJ"M!'J!D3"V!'i!F`"f!(S!J3#'!)X!N!!!P3#
- XC!*d!SJ#R!+J!V3#b!,B![3$#!-F!c!$4!0B!f`$J!18!kJ$a!2B!q`$r!3%""3%
- X(!3S"%!%5!4B"'J%H!5)"*J%U!5i"-J%d!6F"1`%p!83"5!&-!9!"9!&B!9`"A`&
- XM!@J"E`&d!AJ"I!&r!B!"J`')!BJ"M3'5!CF"Q`'J!D8"UJ'Z!E)"YJ'k!Ei"`J(
- X'!FS"cJ(5!GB"f!(D!Gd"i!(N!HJ"l!(`!I3"q!(m!J!#"!))!JX#$`)8!KN#(J)
- XM!LJ#,3)e!Md#43*(!NS#6`*A!Pi#B`*S!Q`#F!*e!RS#IJ+$!SN#MJ+4!T8#QJ+
- XK!UJ#VJ+b!V-#Y`+q!X%#aJ,,!Y%#e3,C!Ym#j3,T!Zm#p3,m!`!$"J-+!`i$%!-
- X5!aF$(J-M!bX$+`-V!bX$+`-V!bX$+`-V!bX$+`-V!bX$+`-V!bX$+`-V!bX$+`-
- XV!c%$0`-q!!!!!!!!!!!!!!!!rrrrrrrr"JErrrrrrrm!!2rrrrrrrrrrrrrrrrr
- Xrrrrrrrrrrrrrrrrrrrm!"rrrrrrrr`-$!3-""3%(!!B!#3!)!3-!"!!%!3F!"J%
- X%!!8"!`%'!!B""J!'!!B!"J!'!!B!"J!'!!B#"!%%!38!"J%&!3B!#!%(!!B!"J!
- X'!!8!"3!'!!B"!`!'!!B!"3!)!!B!"J!'!!B!"J!'!!B!"J!'!!J!"J!'!!8""!%
- X'!33!"!!'!!-!"3!&!!8!"3!&!!3!"3!&!!-!"!!&!!-!#!!&!!8!"3!&!!8!"3!
- X%!!8!"J!)!!B!"J!&!!3!!J!%!!B!!!!'!3F!"J!&!!B!"J!'!!8!"3!&!!8!"3!
- X&!!8!"3!&!!8!"3!$!!-!"!!%!!8!"3!&!!8!"3!&!!8!"3!&!!8!"!!&!!B!"J!
- X'!!B!"J!'!!N!#3!*!33!"!!'!!N!"`%+!!B!"3!&!!B!"J!&!!B!"`-)!J8""3!
- X&!!J"#3!'!3B"!`!&!!J""3!'!3F!#!!)!3J!"J!(!`F!"J!*!!J!"3!(!3F#"`%
- X%!33!"J!)!!B!#Irrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
- Xrrrm!"J!'!!F!!!!!#bD3!!!!!!$[!!m!!2rd!!m!$`5C!!`!!`!"!$i!!!!!!!!
- X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- X!!!!!!(!"-J!!!!!'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&8!!!!!!!IJ1!!!!!
- X!!!!!!!!!$J!i!!!!!!!!!!!!!!!&!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#L)!Nb53!!!#3!!!!!!!!!
- X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&S#J!!!!!!!!!!jmi!S!+!!!!!!!!!!!m!!
- X!"3!%!!!`!!!%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!($!!!!!!!!!!
- X!!!!!!!!!!!!!"`!!L!!!!!3K!0N!L#!C"SN%!d5#!3!!!!!!!!!!!!!!!93!!!!
- X!!"EmS!!!!!!-!!!+4+!+!#J!!!P+J!!$!I[!!!A46RjK55!!"-6[`Ajhlc`!!2!
- X!MjlcrhSB--)1,hchchq'$!Bar38!3)!#!`36$!!!!!!#!!!!!!UC%(([i[3S%T9
- XQ!345TYX3LP@)45Z`$(J$cJ!!G&S!IRS!!"%!crq@a+H!!!5!#)!!#PbJ#J!S!!!
- X56)!%4J(m,r!&er@5N8M!!!NY%)0!J$$#!!%*i)KKLK#''$&$(M$$$$#)KJ`'-3b
- X'J##!!J3%!33!!!!!!J!!!!!+TK!L''--)!!!!!!!!!!!!!!!!!!"54+%"9%H(LE
- XJ!+#&9!!+!#44&[5S3!!!!"%!)!T3S!S!+!!!%T8!3!`"r#J3"B+8P+#(mJ!+&K%
- X&33"3`J34#K&)B)B3JKJb3Ud`````#)B-49%8K!!1mjlZIEF@c@GjphG'-4M(kS!
- XS8JK6$#jcR1FjcR1P+cR1Fk-Ba8Z3!)(T85%K*8!!S)`!K*p%%K%@P,!Zik5!%3!
- XJ#P#RqJ!SlJ!!!"#NArAm+"!&MmaS3)6#!")8%`Ppm%p$5!J8k8qJKK##'$4#66$
- X$$$!)K4**5K4%!"'-Ba518bFcQ-BiLNBa'-3UJ#K5#&---BaM'-BaM'8XaM'-BaM
- X&09"lq9*Fc+4!%5#99)K%4(%4GTH`-44%J#1b8!T3T"Z!la%!!!!"&(rpr#J3"B8
- X'%+#&,jm5#4!`L3!-)6j#8U+'#(hTri1%)-X2d2c`L&%UL+*%3!$i`M&)a64L-
- XBaM##4LUP4&*!4)S25``[Hplh`M'-C5M'-BaM'-3&1)Ij89,3J!(jr+3$m$p%N!#
- X44TB`,a6)r#&-8*[6[hMrJa%!!!"q$(rjr#J3"B!&,45%!J!L&%"K!`L3!,iJ!N8
- XU+'#'%)BB0%)-X-%0!)L%SUP%4#3!%B`Mp)a6KL-BaM"b48UL4)U!4)S)5``aM'-
- XB`rrrj5M'-BaM'-3&%)Ie80c3J!!L)-98L%4&%4&fPqK4p9#'33#*+0)*5m([(rr
- XJ!!)-3rRm+"!&J!96#)3#!#)8J(q$#4##%!4%prKJKK#'($*#$($"$)#)K+%44%3
- XN!"'-)`5-8dBM'-B`#N9%488+J2rq#%F--BaM'-)3K#8SaM'-BaM%"4"lmp$5c)!
- X!3L#%!)5%44)4&T3)83C4K8%bLNrcq8Tr+4!!!!!4&%BIr#J3"3!9Na4)!!""*3L
- X"3`N3K![S!J3BBBS3KK`a3Ja``5a3L)4"%L5%&!!4M'-8M&-Q)aM'-)T-K%M'#S#
- X$"KK($$'-BaM'-BaP+-BaM'Fjc!94"H&4)5%!!I`KK93!"%8N84DF"*%88B#"638
- XJ!!&+!#N4!!!!!+4)!I`S%!@!$ScL5!!J`-Ih!6ca$cP%%%(%(jlcm(SEd2i-,d$
- Xd,`Ki34)Nr"4rMr1Hj(a6&L-AHI"aY)4)[qU!J`A[`[22HplhZFjcT5LjcR1DeV3
- X$[S3"GKiH!!#%2RJ$rq4kcp%@J!c1kik!J3(mN!!!!8S!+1i!!!!!3m!"r#r`"3!
- X%!!!`!#!!!!!!!!!!!%!!!!!!!!!!!!!!!!!!!!J!!!!!!!!'$!!!!!!!#!)!!!"
- X!)!!!!!!%"`!!!%!!!!!!!!!3!!!!!!!!!!!!!!%!H!!!!!!!!!!!!93!!%!!!"D
- X!!!!!!!!"!!!!!!&+!#J!!!!!!!"!!!IJ!!8!!!!!!!"!!!!!!!!!!!#!!!!!!!!
- X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)J#!!!!3#!!!!!!4!!!!!!J!!!!!!!!)!!
- X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#!!!!@J!!!!!!!!3!!!!!"bJ!S!!!!!!!
- X%3!!!!!!&!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- X!!!"`$!!!!!!!!!!!!$J!!!!!3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- X"9!!!!!!!(i!!!!!!!!)!!!!!!!i!1!!!!!!!!i!!!!!!"3!!!!!!!!!!!!!!!!!
- X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- X!!!!!!!!!!!%!"!!,!"!!&`!I!#!!)`!Q!#`!-3!c!$J!13!q!%3!4J"-!&)!@3"
- XI!'8!D`"a!(F!H!"k!(i!J`#(!)d!P3#F!+)!U!#Z!,-!Z!#q!-3!a3$,!0%!eJ$
- XG!1-!k3$[!28!q`%"!3J"$J%9!4i")`%S!5d",`%d!6B"13&"!8-"5!&0!9)"9`&
- XF!@!"C3&U!@`"E`&d!AB"I`'%!BN"MJ'6!CJ"R3'K!DB"U`'d!EN"[J($!FB"a`(
- X+!G!"d!(A!Gi"j!(T!Hm"p3(l!J!#"3)+!Jm#&!)C!Ki#)`)S!Ld#-J)d!MB#13)
- Xm!N%#4J*,!P!#93*D!Pm#C!*T!Qi#F3*e!RS#J!+'!S`#NJ+C!U%#U3+b!V3#Y`+
- Xp!XF#c`,@!YX#h`,M!ZJ#l`,d![S$!3-'!`N$$J-6!aX$*!-V!c!$-3-f!ci$330
- X(!di$9!0C!ei$C30X!h%$H!0r!iJ$M!16!jJ$R31I!k%$TJ1Y!l)$[`1r!lm$[`1
- Xr!lm$[`1r!lm$[`1r!lm$[`1r!lm$[`1r!lm$[`1r!lm$a32,!p8!!2rr!!!!!!!
- X!!!$rrrrrrrm)#2rrrrrrr`!!rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
- Xrrrrrrrrr"!3"!`%&!3N""`%*!!N"!`%&!38"#!%(!33""`%$!3F"#!-)!3J"#!%
- X)!3J"#!%)!3J"#!%$!33""J%(!3B"#!%+!3N"#!%)!3J""`%(!3J"#!)&!!F"#!%
- X(!3N"#!%)!3J"#!%)!3J!#!%)!3N"#`%(!3F""`%%!3F""!%%!!J""!%(!3F""`%
- X(!3F""J%(!3F""3%'!3F""3%,!3F""`%(!3F""J%(!3B""`%(!3X""`%(!3F""3%
- X$!38"#!!!!3N"#3%)!3F"#!%)!3J""`%(!3F""`%(!3F""`%(!3F""`%(!J8""3%
- X&!38""`%(!3F""`%(!3F""`%(!3F""`%&!3B""`%)!3J"#!%)!3N"#J%+!3X""!%
- X&!3J"$!!)!!X""`%'!3B""`%*!3F"#!%*!JS""3!'!!B"#J%,!!F"#!)%!3F"#J%
- X&!3J"#3%)!3J##J!)!3N##3%)!``"#`%'!3N""`%(!33""!%(!3N"#!%2rrrrrrr
- Xrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr`)*!JN!#VEE!!!!4!!
- X!!!!!!!!!!!J!$!"k!%%!HJ!-!!J!!!!!!!!!!!!!!!!!!!!!!!!!#!!-!(i!I`"
- Xq!!`!#!!!!!!!!!!!!!!!"`!*!!!!4!!!!!!!!!!!!!!!!!!!!!!!!!(!!8!"3!G
- X`!L!"3!#!!!!!!!!!!!!!!!!!!!!!!!!!!F!"`!(!"r!$i!(!!)!!#3!)!!!!4!!
- X!!!!!!!!!!!!3!$!!AJ##!&i!-!!3!!!!!!!!!!!!!!!!!!!!!!!!!"!!-!"q!2i
- X!IJ!`!"!!!!!!!!!!!!!!#!!'!!!!4!!!!!!!!!!!!!!!!!!!!!!!!!!!!"!!+3!
- XA!!N!#3!I!!!!!!!!!!!!!!!!!!!!!!!!!!!!%!!j!"m!$`!2!"m!#`!,!!!!4!!
- X!!!!!!!!!!!!!!!!!!!!!!!!!#!#8!1J!N!!!N!!!q!!!!!!!!!!!!!!!!!!!!!!
- X!!!!!!!J!R!$i!2!!m!$i!!!,!!3!!!"%q!#3!!#3!!$S!*3!#!!!!!!!!!!!!!!
- X!!!!!!!!!!!!!!2J!m!$`!2J!R!!)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!3!"!!
- X!!%3!!!!!($JL4#'%)B355!``$$!55#'%)B3L4"`i!!!!!!!!!!!F1$jm2r`rr"j
- Xi$$!--"ji2r`rr$jm($J!!!!!!!F!"`!!!%3"!!+!"%!1i!+!!S!$J!!!!!!!!!!
- X!!!!!!!!!!!!!!!%!!i!(`!rJ!i!$J!1!!!!!!!!!!!!!!!!!!!!!!!!!!!B!"`!
- X!!%3!(`!*!!N!&`!T!"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!I!!m!$`!I!$N!%!!
- X!!!!!!!!!!!!!!!!!!!!!!!!!!!3!#`!!!"!26Q9d5'&MDb"AD@jNEhGc!!!!%3!
- X)!6`"2J%%!@m!!@N"C!%X!!!!G!#&!!!!!!!!!!$rrrrI#%0[E@eKEQ4c#N0XD@e
- XL)%4[Gfi!!!!!#%0XD@eL)&9`!!!!!!4,D@0V!!!!!!P2F'9Z)%4[Eh)!!!!!!5d
- X!!!!!#8PZGQ9ZG'pbH3!!!!!%4(*[F!!!!!!(8'PMDb"9F!!!!!!!!!!!b!#'!!!
- X!!!!!!!$rrppr"P4SD@jRF`YAC@&b)%&bE@peFJ!!!!!*9f9KFL"5D@jR!!!!!!a
- XAD@9XC#"AC@&`Efi!!!!!$e4KDf8J6fCQ)%&bE@peFJ!!!!!09'&VC5"2CQBJ8QP
- XZC`!!!!!19@jhD@9XC#"AC@&`Efi!!!!!!5d!!!!!!d9KG!!!!!!&8A9KCQB!!!!
- X!"&*PB@3!!!!!"94SFQph!!!!!!0DBA!!!!!!!5d!!!!!$%4TFf0[GQ9bD@9c2`!
- X!!!!!!!!!(3!1!9F"8!&h!93"8J*h,3!"C3&a!A)"G!&k!!&F!!!!%!!(!)!!J3#
- X#!)-!K!#&!)B!!!%!!!"&e`!!40F!!!8l!GlUY#1J!!!!(!3H!""A58j%!!B!LP4
- X08%`!!!$H6R9YF!!"!1T"6&*8!!%"!N4*9%`!#3%D68*"8J!!!C*048j9!!B"RP0
- X88L-!"`(bD@0c0!!#!P*TBh-M!!)#GNP$6L-!!J+DD@0X0!!#!Vj%6%p(!!F#iNC
- X26P3!!`0#4Np14!!"!h*$99*6!!J$LP088L!!!!2f!)!!,3!!!(J!!!!!!)%!!!!
- X!!!!!!!!!!))!#!!!!#!!!!!!!)-!$`!!!0i!!!!!!)3!&`!!!%!!!!!!!)8!(!!
- X!!&S!!!!!!)B!)3!!!3)!!!!!!)!!-J!!!*i!!!!!!)!!0`!!,%-!!!!!!)%!33!
- X!,&d!!!!!!)(rrb!!$!%!!!!!!)$rr`!!$kd!!!!!!)(rrb!!$"%!!!!!!)$rr`!
- X!$ld!!!!!!),rr`!!%QF!!!!!!)2rr`!!%Xd!!!!!!)6rr`!!&%N!!!!!!)Mrr`!
- X!%Gm!!!!!!)Arr`!!%)X!!!!!!)Err`!!%1%!!!!!!)Irr`!!%8N!!!!!!)Rrr`!
- X!&CX!!!!!!)$rr`!!4--!!!!!!)(rr`!!!CF"hZN%!),rr`!!!IJ"hZN3!)2rr`!
- X!!N3"hZN!!)6rr`!!!qB"hZN)!)$rr`!!!@X"hZMm!)Arr`!!3ei"hZMi!)Err`!
- X!3pB"hZMd!)!!GJ!!!5d!!!!!!)%!D`!!!8F!!!!!!))!B3!!!9N!!!!!!)-!9`!
- X!!5B!!!!!!)3!53!!!dX!!!!!!)8![J!!!p-!!!!!!)B"!`!!3dN!!!!!!)F"%3!
- X!4+)!!!!!!qMrr`!!"'%!!!!!!qRrr`!!"18!!!!!!qVrr`!!&JX!!!!!!qMrr`!
- X!"@N!!!!!!qRrr`!!"Dd!!!!!!qVrr`!!$@8!!!!!!qMrr`!!"I%!!!!!!qRrr`!
- X!"[8!!!!!!qVrr`!!$'%!!!!!!qMrr`!!"rN!!!!!!qRrr`!!#Id!!!!!!qVrr`!
- X!$DN!!!!!!)3!PJ!!%"X!!!!!!)J!K!!!%F-!!!!!!)F!N3!!%$F!!!!!!)B!M3!
- X!%&-!!!!!!)8!LJ!!%'m!!!!!!)N!S!!!&Am!!!!!!))!VJ!!$q-!!!!!!)-!Y3!
- X!$rm!!!!!5iRrrb!!&Sm!!!!!5icrr`!!)"X!!!!!6!N!h#!!,,d!!!!!6!`!k5!
- X!0B-!!!!!!*F!b!3!+rd!!!!!!*J!d33!,(F!!!!!!J$rr`!!3Pd!!!!!!J(rr`!
- X!3U8!!!!!!J,rr`!!3Zd!!!!!!J2rr`!!3+d!!!!!!JArr`!!328!!!!!!JIrr`!
- X!36d!!!!!!J6rr`!!3B8!!!!!!JErr`!!3Fd!!!!!!JMrr`!!3K8!!!!!!)!!p!!
- X!3c8!!!!!"dePFh0KCf8'8h4KG(9c"d4eEQGPEfi%6@9ZG348CAKd#d4TB@GZEh0
- XdD@0c"%j96%`%6R9YF!P9ER0SD@CdC@3(8fKTCR4PC!e&H(4PEQ4PC#"0C@je#89
- XNDA3J6@9ZG3P'D@aP)%ePER8+3A"`E'8J6@9ZG3e0DA0M,L"6G(*TEQGc"APZ6Q&
- Xa!RPZ!hPZF34jEQ&a#80SBA*KBh4PFJe6E@&XE#"(CA4XD@jP"P"bEfe`G!K&H(4
- XPEQ4PC!P0DA0M)%ePER8)5'&MDdC[ER3+8&0)B@0V4QpZG!a38dKKBfY'Efjd)$N
- X+8&0)B@0V4QpZG!j3FQ9Q)%CTE'8J6Q&YC3e$EfeYB@jNFb"YC@je#e4SD@jRFb"
- XYC@je,im:
- END_OF_FILE
- if test 26186 -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'
- fi
- if test -f 'sys/unix/snd86unx.shr' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'sys/unix/snd86unx.shr'\"
- else
- echo shar: Extracting \"'sys/unix/snd86unx.shr'\" \(28226 characters\)
- sed "s/^X//" >'sys/unix/snd86unx.shr' <<'END_OF_FILE'
- X#! /bin/sh
- X# This is a shell archive. Remove anything before this line, then unpack
- X# it by saving it into a file and typing "sh file". To overwrite existing
- X# files, type "sh file -c". You can also feed this as standard input via
- X# unshar, or by typing "sh <file", e.g.. If this archive is complete, you
- X# will see the following message at the end:
- X# "End of shell archive."
- X# Contents: READ.ME Files Install Makefile Master Name Node Remove
- X# Size System playtest spkr.7 spkr.c spkr.h
- X# Wrapped by billr@saab on Wed Jan 27 08:37:43 1993
- XPATH=/bin:/usr/bin:/usr/ucb ; export PATH
- Xif test -f 'READ.ME' -a "${1}" != "-c" ; then
- X echo shar: Will not clobber existing file \"'READ.ME'\"
- Xelse
- Xecho shar: Extracting \"'READ.ME'\" \(1372 characters\)
- Xsed "s/^X//" >'READ.ME' <<'END_OF_FILE'
- 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 is structured as a standard installable driver
- XXkit containing the following files:
- 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:
- 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:
- XXMakefile -- Makefile for driver code
- XXspkr.c -- the driver source
- XXspeaker.h -- ioctl interface file
- XX
- XXTo make the installable code, simply type `make' and wait. The 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
- 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_FILE
- Xif test 1372 -ne `wc -c <'READ.ME'`; then
- X echo shar: \"'READ.ME'\" unpacked with wrong size!
- Xfi
- X# end of 'READ.ME'
- Xfi
- Xif test -f 'Files' -a "${1}" != "-c" ; then
- X echo shar: Will not clobber existing file \"'Files'\"
- Xelse
- Xecho shar: Extracting \"'Files'\" \(24 characters\)
- Xsed "s/^X//" >'Files' <<'END_OF_FILE'
- XX/usr/include/sys/spkr.h
- XEND_OF_FILE
- Xif test 24 -ne `wc -c <'Files'`; then
- X echo shar: \"'Files'\" unpacked with wrong size!
- Xfi
- X# end of 'Files'
- Xfi
- Xif test -f 'Install' -a "${1}" != "-c" ; then
- X echo shar: Will not clobber existing file \"'Install'\"
- Xelse
- Xecho shar: Extracting \"'Install'\" \(812 characters\)
- Xsed "s/^X//" >'Install' <<'END_OF_FILE'
- 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_FILE
- Xif test 812 -ne `wc -c <'Install'`; then
- X echo shar: \"'Install'\" unpacked with wrong size!
- Xfi
- X# end of 'Install'
- Xfi
- Xif test -f 'Makefile' -a "${1}" != "-c" ; then
- X echo shar: Will not clobber existing file \"'Makefile'\"
- Xelse
- Xecho shar: Extracting \"'Makefile'\" \(353 characters\)
- Xsed "s/^X//" >'Makefile' <<'END_OF_FILE'
- 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 spkr.7 Makefile spkr.[ch] $(DSP) playtest >speaker.shar
- XEND_OF_FILE
- Xif test 353 -ne `wc -c <'Makefile'`; then
- X echo shar: \"'Makefile'\" unpacked with wrong size!
- Xfi
- X# end of 'Makefile'
- Xfi
- Xif test -f 'Master' -a "${1}" != "-c" ; then
- X echo shar: Will not clobber existing file \"'Master'\"
- Xelse
- Xecho shar: Extracting \"'Master'\" \(34 characters\)
- Xsed "s/^X//" >'Master' <<'END_OF_FILE'
- XXspeaker ocwi iocH spkr 0 0 1 1 -1
- XEND_OF_FILE
- Xif test 34 -ne `wc -c <'Master'`; then
- X echo shar: \"'Master'\" unpacked with wrong size!
- Xfi
- X# end of 'Master'
- Xfi
- Xif test -f 'Name' -a "${1}" != "-c" ; then
- X echo shar: Will not clobber existing file \"'Name'\"
- Xelse
- Xecho shar: Extracting \"'Name'\" \(39 characters\)
- Xsed "s/^X//" >'Name' <<'END_OF_FILE'
- XX386 UNIX Speaker Device Driver Package
- XEND_OF_FILE
- Xif test 39 -ne `wc -c <'Name'`; then
- X echo shar: \"'Name'\" unpacked with wrong size!
- Xfi
- X# end of 'Name'
- Xfi
- Xif test -f 'Node' -a "${1}" != "-c" ; then
- X echo shar: Will not clobber existing file \"'Node'\"
- Xelse
- Xecho shar: Extracting \"'Node'\" \(20 characters\)
- Xsed "s/^X//" >'Node' <<'END_OF_FILE'
- XXspeaker speaker c 0
- XEND_OF_FILE
- Xif test 20 -ne `wc -c <'Node'`; then
- X echo shar: \"'Node'\" unpacked with wrong size!
- Xfi
- X# end of 'Node'
- Xfi
- Xif test -f 'Remove' -a "${1}" != "-c" ; then
- X echo shar: Will not clobber existing file \"'Remove'\"
- Xelse
- Xecho shar: Extracting \"'Remove'\" \(475 characters\)
- Xsed "s/^X//" >'Remove' <<'END_OF_FILE'
- 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_FILE
- Xif test 475 -ne `wc -c <'Remove'`; then
- X echo shar: \"'Remove'\" unpacked with wrong size!
- Xfi
- X# end of 'Remove'
- Xfi
- Xif test -f 'Size' -a "${1}" != "-c" ; then
- X echo shar: Will not clobber existing file \"'Size'\"
- Xelse
- Xecho shar: Extracting \"'Size'\" \(18 characters\)
- Xsed "s/^X//" >'Size' <<'END_OF_FILE'
- XXROOT=1400
- XXUSR=100
- XEND_OF_FILE
- Xif test 18 -ne `wc -c <'Size'`; then
- X echo shar: \"'Size'\" unpacked with wrong size!
- Xfi
- X# end of 'Size'
- Xfi
- Xif test -f 'System' -a "${1}" != "-c" ; then
- X echo shar: Will not clobber existing file \"'System'\"
- Xelse
- Xecho shar: Extracting \"'System'\" \(26 characters\)
- Xsed "s/^X//" >'System' <<'END_OF_FILE'
- XXspeaker Y 1 0 0 0 0 0 0 0
- XEND_OF_FILE
- Xif test 26 -ne `wc -c <'System'`; then
- X echo shar: \"'System'\" unpacked with wrong size!
- Xfi
- X# end of 'System'
- Xfi
- Xif test -f 'playtest' -a "${1}" != "-c" ; then
- X echo shar: Will not clobber existing file \"'playtest'\"
- Xelse
- Xecho shar: Extracting \"'playtest'\" \(729 characters\)
- Xsed "s/^X//" >'playtest' <<'END_OF_FILE'
- XX#
- XX# Test script for the speaker driver
- XX#
- XX# v1.0 by Eric S. Raymond (Feb 1990)
- 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#.agagec~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:\n"
- 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_FILE
- Xif test 729 -ne `wc -c <'playtest'`; then
- X echo shar: \"'playtest'\" unpacked with wrong size!
- Xfi
- X# end of 'playtest'
- Xfi
- Xif test -f 'spkr.7' -a "${1}" != "-c" ; then
- X echo shar: Will not clobber existing file \"'spkr.7'\"
- Xelse
- Xecho shar: Extracting \"'spkr.7'\" \(5533 characters\)
- Xsed "s/^X//" >'spkr.7' <<'END_OF_FILE'
- XX.deTH
- XX.PD
- XX.nrIN \\n()Mu
- XX.ift .ds ]H \\$1\^(\^\\$2\^)
- XX.ifn .ds ]H \\$1(\\$2)
- XX.if\\n()s .ds ]D
- XX.if\\n()t .ds ]D UNIX System V
- XX.ifn .ds ]D UNIX System V (addition)
- XX.ds]L
- XX.if!^\\$3^^ .ds ]L (\^\\$3\^)
- XX.if!^\\$4^^ .ds ]D \\$4
- XX.wh0 }H
- XX.wh-\\n(:mu }F
- XX.em}M
- XX.if\\n(nl .bp
- XX.nr)I \\n()Mu
- XX.nr)R 0
- XX.}E
- XX.DT
- XX.ifn \{.na
- XX.nh\}
- XX.ift \{.bd S 3 3
- XX.hy14 \}
- XX..
- 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_FILE
- Xif test 5533 -ne `wc -c <'spkr.7'`; then
- X echo shar: \"'spkr.7'\" unpacked with wrong size!
- Xfi
- X# end of 'spkr.7'
- Xfi
- Xif test -f 'spkr.c' -a "${1}" != "-c" ; then
- X echo shar: Will not clobber existing file \"'spkr.c'\"
- Xelse
- Xecho shar: Extracting \"'spkr.c'\" \(12412 characters\)
- Xsed "s/^X//" >'spkr.c' <<'END_OF_FILE'
- 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 */
- XX
- 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#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 * This code requires SVr3.2-compatible inb(), outb(), timeout(), sleep(),
- XX * 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(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 sps = spl5();
- XX outb(PIT_CTRL, PIT_MODE); /* prepare timer */
- XX outb(PIT_COUNT, (divisor & 0xff)); /* 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(endtone, (char *)NULL, ticks);
- XX sleep(endtone, PZERO - 1);
- XX}
- XX
- XXstatic int endrest()
- XX/* end a rest */
- XX{
- XX wakeup(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(endrest, (char *)NULL, ticks);
- XX sleep(endrest, PZERO - 1);
- 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}
- 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. SVr3.2-compatible copyin()
- XX * is also required.
- XX */
- XX
- XXstatic int spkr_active; /* exclusion flag */
- 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 u.u_error = ENXIO;
- XX else if (spkr_active)
- XX u.u_error = EBUSY;
- XX else
- XX {
- XX playinit();
- XX spkr_active = 1;
- XX }
- XX}
- XX
- XXint spkrwrite(dev)
- XXdev_t dev;
- XX{
- XX#ifdef DEBUG
- XX printf("spkrwrite: entering with dev = %x, u.u_count = %d\n",
- XX dev, u.u_count);
- XX#endif /* DEBUG */
- XX
- XX if (minor(dev) != 0)
- XX u.u_error = ENXIO;
- XX else
- XX {
- 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 }
- 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 u.u_error = ENXIO;
- XX else
- XX {
- XX endtone();
- XX spkr_active = 0;
- XX }
- XX}
- XX
- XXint spkrioctl(dev, cmd, cmdarg)
- XXdev_t dev;
- XXint cmd;
- XXchar *cmdarg;
- XX{
- XX#ifdef DEBUG
- XX printf("spkrioctl: entering with dev = %x, cmd = %x\n");
- XX#endif /* DEBUG */
- XX
- XX if (minor(dev) != 0)
- XX u.u_error = 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 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 }
- XX else
- XX u.u_error = EINVAL;
- XX}
- XX
- XX/* spkr.c ends here */
- XEND_OF_FILE
- Xif test 12412 -ne `wc -c <'spkr.c'`; then
- X echo shar: \"'spkr.c'\" unpacked with wrong size!
- Xfi
- X# end of 'spkr.c'
- Xfi
- Xif test -f 'spkr.h' -a "${1}" != "-c" ; then
- X echo shar: Will not clobber existing file \"'spkr.h'\"
- Xelse
- Xecho shar: Extracting \"'spkr.h'\" \(317 characters\)
- Xsed "s/^X//" >'spkr.h' <<'END_OF_FILE'
- XX/* spkr.h -- interface definitions for speaker ioctl() */
- XX
- XX#define SPKRIOC ('S'<<8)
- XX#define SPKRTONE (SPKRIOC|1) /* emit tone */
- XX#define SPKRTUNE (SPKRIOC|2) /* emit tone sequence*/
- XX
- XXtypedef struct
- XX{
- XX int frequency; /* in hertz */
- XX int duration; /* in 1/100ths of a second */
- XX}
- XXtone_t;
- XX
- XX/* spkr.h ends here */
- XEND_OF_FILE
- Xif test 317 -ne `wc -c <'spkr.h'`; then
- X echo shar: \"'spkr.h'\" unpacked with wrong size!
- Xfi
- X# end of 'spkr.h'
- Xfi
- Xecho shar: End of shell archive.
- Xexit 0
- END_OF_FILE
- if test 28226 -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'
- fi
- if test -f 'sys/vms/lev_lex.h' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'sys/vms/lev_lex.h'\"
- else
- echo shar: Extracting \"'sys/vms/lev_lex.h'\" \(587 characters\)
- sed "s/^X//" >'sys/vms/lev_lex.h' <<'END_OF_FILE'
- X/* SCCS Id: @(#)lev_lex.h 3.1 92/01/10 */
- X/* "vms/lev_lex.h" copied into "util/stdio.h" for use by lev_lex.c only!
- X * This is an awful kludge to allow util/lev_lex.c to be compiled as is.
- X * It works because the actual setup of yyin & yyout is performed in
- X * src/lev_main.c, where stdin & stdout are still correctly defined.
- X */
- X/* note for 3.1: also used with util/dgn_lex.c */
- X
- X#ifdef __GNUC__
- X# ifndef CONST_OK
- X# define const
- X# endif
- X#endif
- X
- X#include <stdio.h>
- X#ifdef stdin
- X# undef stdin
- X#endif
- X#define stdin 0
- X#ifdef stdout
- X# undef stdout
- X#endif
- X#define stdout 0
- END_OF_FILE
- if test 587 -ne `wc -c <'sys/vms/lev_lex.h'`; then
- echo shar: \"'sys/vms/lev_lex.h'\" unpacked with wrong size!
- fi
- # end of 'sys/vms/lev_lex.h'
- fi
- echo shar: End of archive 78 \(of 108\).
- cp /dev/null ark78isdone
- MISSING=""
- for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 \
- 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 \
- 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 \
- 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 \
- 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 \
- 101 102 103 104 105 106 107 108 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked all 108 archives.
- echo "Now execute 'rebuild.sh'"
- rm -f ark10[0-8]isdone 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
-