summaryrefslogtreecommitdiff
path: root/tutorials/sndkit/morse
diff options
context:
space:
mode:
Diffstat (limited to 'tutorials/sndkit/morse')
-rw-r--r--tutorials/sndkit/morse/Makefile27
-rw-r--r--tutorials/sndkit/morse/Vvcw1801
-rw-r--r--tutorials/sndkit/morse/charlist.h96
-rw-r--r--tutorials/sndkit/morse/loadcw.c163
-rw-r--r--tutorials/sndkit/morse/morse.c316
-rw-r--r--tutorials/sndkit/morse/morse2.c578
-rw-r--r--tutorials/sndkit/morse/morse3.c572
-rw-r--r--tutorials/sndkit/morse/randomcw2
-rw-r--r--tutorials/sndkit/morse/testgen.c65
9 files changed, 3620 insertions, 0 deletions
diff --git a/tutorials/sndkit/morse/Makefile b/tutorials/sndkit/morse/Makefile
new file mode 100644
index 0000000..79d36f5
--- /dev/null
+++ b/tutorials/sndkit/morse/Makefile
@@ -0,0 +1,27 @@
+INSTALLDIR=/usr/local/bin
+TARGETS=morse morse2 morse3 testgen loadcw
+CFLAGS=-I../../../include
+LDLAGS=
+
+all: $(TARGETS)
+
+morse2.o morse3.o morse.o testgen.o: charlist.h
+
+morse: morse.o
+ $(CC) $(LDFLAGS) -o morse morse.o -lm
+
+morse2: morse2.o
+ $(CC) $(LDFLAGS) -o morse2 morse2.o -lm
+
+morse3: morse3.o
+ $(CC) $(LDFLAGS) -o morse3 morse3.o -lm
+
+testgen: testgen.o
+ $(CC) $(LDFLAGS) -o testgen testgen.o -lm
+
+install: $(TARGETS)
+ cp -f $(TARGETS) randomcw Vvcw $(INSTALLDIR)
+ chmod 755 $(INSTALLDIR)/randomcw
+
+clean:
+ rm -f *.o $(TARGETS) core core.* x y z *~
diff --git a/tutorials/sndkit/morse/Vvcw b/tutorials/sndkit/morse/Vvcw
new file mode 100644
index 0000000..d7c8e57
--- /dev/null
+++ b/tutorials/sndkit/morse/Vvcw
@@ -0,0 +1,1801 @@
+#H001
+FSIEL DHNRS NEINN O=IDI
+EIIIE U0ZHS VSE™N BXN9O
+ISEHS N5PAN AMTUP JTGAC
+AEHGE IXWUM KSYQU ISEIT
+SUIVˇ WOUDQ I5™ES
+#H002
+PDSTH ANQ™L TIINT A3BEA
+SUXIU OIDGE NIIˇB EDUNF
+SCIES VEVWQ 2SSRA ITDET
+ETMID HEUA2 YEQND 8A9BA
+ITDJN E¸USZ KAFBS
+#H003
+ERPT7 EˇH8F ESOGE AZUAT
+ILN™™ ANSES FAQC? BATTI
+ZUTWI QTHAP BVIII BISXR
+AVT2N NMESS /EDGE ENYKD
+UEHAT LMJSI SIHMR
+#H004
+JTDE2 TTNSY IANOV ZXUIU
+DIP1R F¸EEH AAQHH N8NMD
+BIAND IWEES GRKII TUU¸I
+ILEEN R/MJA HUEIA TDNAI
+™TCSS UAEAE Sˇ1QS
+#H005
+SDXI9 ANSTC NHSIV MYENJ
+EX82I ™IAQI NEAVZ TNLSA
+TCELH UDNEO ˇKTI™ AMLNI
+SFAEE NEWTH S1GTM PDBII
+MA5ˇE MSHHJ ETIBR
+#H006
+USˇEI SEGIA NBNˇR IQL™R
+DAAET OFMCE MEZIT LPLSN
+SY699 DANDB HIARA HIIVE
+QETO3 TNEAS A6ATI AJXRE
+™REDT DAKSC YWIII
+#H007
+ZSRNI HEˇSE SLTFE LE3DA
+NXCSO INVVJ E3HWS KTEWM
+IYNUI BTUUS 7ZAKR TPINS
+=PEEE A™RII ™NFRA RTIDE
+QDATG AMTL/ WQNTS
+#H008
+IHUAS KIOZV ?NOTT TNXYF
+J6I™U TFBS™ T0AAH EAYUE
+DE0US ENTAE EMPEI ˇGNNI
+ITANT NHSBC QURSL AˇEMX
+ˇIRTR SSSWM EIRE5
+#H009
+FHKCZ O™SES BSIE0 SIEE8
+PAˇUM EUMNA 2IHOD WVSUE
+IEIIQ TNAVP TETXM LISNN
+IDNRT INETR NIGND B2AVF
+XTTAN SKND0 EHUYJ
+#H010
+STPEI EVAIT HSUEA ODWEI
+SSMNˇ YZH?J C™RTO FIBHE
+I6EHT ™ANNW ˇERAH AEXT1
+N3LIQ NIISK =AYSN RTTSJ
+DEHIV SPTND EGSWH
+#H011
+IWRES ALJAE EVWXE SIQHB
+TSDN2 ASSNY ENRTQ EIRTD
+MAEDN UIKRA ZYUCF IGS™T
+SXETI ˇDOCI A0WIE PAIRN
+IDTNI M/EAB 6N9ZD
+#H012
+EPQUR RL2SE HS=VK ETFˇR
+SSTNI HW™OH SBAVA XNQT6
+TIDNN RWECS SAONT I™ESN
+EIUNU SKIIP YETEA 6ETIE
+Q1TJT ZRTDA ™SGDM
+#H013
+KISLO TENAS ANITD W?HEZ
+1E=PR NQ™SF ˇHFBE ˇTLJ™
+CXTMU ARSON ETIIQ SIIAD
+?IHTS 5VPUE HYAMA DSEEM
+ATEAI CCEAN IGTAD
+#H014
+ANSQI 3GMHE EADXE TEEA™
+ESTYI KUUIC THNI6 ˇWLCD
+IAD0V KTETR STZSH FINEH
+WNH3S I™OAP SXVIA BEMHA
+EATDS I6S¸A ˇJZTM
+#H015
+ENELT AHMUQ AUSNT EPMUN
+LAU3Q ?TMTˇ 3KNUˇ NEHT6
+TNMMD SSCWA NTJEI ™TVYE
+ZXACB EIGFO LAANI ˇEHII
+ISTER EˇTSO IGN7J
+#H016
+VIESW I7AAE UINNS EYILI
+NSAAU NED2F SSEIK G™7FH
+IAETS M?NTZ UHAI9 OEGML
+CQQIL MRIIU IRNEN SHRAO
+DBZ™J NTEPE TXOTˇ
+#H017
+DH™U6 EOTN3 A=ELK UIMTI
+ZDIEI LA¸NF SQAHT NADGK
+ISSVS ANVNˇ EIHCD SXEPM
+NTET™ WTNTE UAGAI N=BTP
+STJED ™G?UE EYIRC
+#H018
+YAˇˇB TSVW= NDFOV KTBJE
+AUQ/R TIATI R9PSN E™3HI
+CGRST EXTZ8 ENNIA TMFSS
+TETNI DEECM SMNLH MERCT
+EMAJC NMIAE ATSJS
+#H019
+WXLID TISEˇ SCTUE SCHAA
+RABHR AAH0U FAJII AEOWD
+S™NMH I1NYQ XˇATI PTTVT
+KEAEI ISSEK MIDN9 M1HKN
+ZAI4C ENTEL GAEER
+#H020
+UQNZS /IIHN AN™Tˇ KFYMI
+IZ¸IT 6OENL RII2E ERNTT
+NAMWI EUS¸E TJEES XAC?2
+VINEU MSTDD MPQGS DCNSI
+BTARU ESDAJ RRAES
+#H021
+KAEA= AQXUE DNTTE NAIAO
+HDG3L IIGE/ TˇRAT ZECSO
+ZBI™G HAD¸Y ERE=S 7INIW
+AWIEI ASSDF NUTVD VEPUY
+EMNTW SNIUT AJHIJ
+#H022
+TZQT™ DXETJ ESIBA RHTUD
+HIVˇK YSUXD NˇEIE IK2W?
+AJSIK GSITO EAIUR ISFES
+ASM4D EE2JP IA6GD NNSEC
+LFPRI TSNEX SNDAT
+#H023
+V™SUA XLWAE T4NES FHRNI
+SQSYI SPATS ˇGUNY TKMTU
+LEOOM NQTS™ ESSSB IEFS3
+EHTIC JITBH N5GIT MZEMA
+AEDXI CRD1E T3RNE
+#H024
+YCVSW Q™IEM SJEKN DEIII
+BEEIT AIIEM GESJE TPA=I
+SZTES NONFM RRD9S TTNUJ
+ISHV4 OINQX S2NL4 ISATN
+DSˇEN UGUAY HFMDˇ
+#H025
+KHSAA IYZNA LE5IE UARC1
+N™UTS NHE/U ATD1G OTEMT
+ETIGI INEES QF=EQ DUIEP
+DXSHC BBJAT M™SHN IˇWST
+SIVNN ETFNN ¸IUXK
+#H026
+WAHSU FMOIM TYEBV S48SE
+AENNN IAMEO EJCWN S™EPA
+7HTYM DKQOT YDGTH SˇITA
+HEIAT II¸8I EWMAU ANDLE
+VZRTX BI6AA TEVIS
+#H027
+OPIRM NLENM THUTG THEIN
+XYSIS V™NEA NLEI= NKEI™
+BAYRQ TRFSI SI6S7 NSHOM
+OBZ22 IEDMU EEWSW NSJAI
+RINTE ˇEˇTO DWNTC
+#H028
+H7TNM SN=ZI NTYKJ EOXDX
+AIG™I MPWAI AEDBM KFE=H
+AVˇWT ENUED NNESM QYEPX
+TT8NO LI6D™ SIUPD IESNE
+ACHRF NTNTT IEAST
+#H029
+EFHSH ZˇIUM EEUII LADST
+M9I8N EIXAN N78GT UTLSB
+DEWSM ISTPN ™MRN™ VEPCD
+NEKAT AJSLE FIKGT TEODR
+TSYAE TNAJ9 QKINS
+#H030
+HSPEA TSOHS G5WˇF ME™PT
+IKUPA LˇZ1= R3NDV QTRMM
+I™BBI NGEEK HIATE NNOJD
+EXGRC MASTE MTS=I EISYU
+TEASS TTAES JAISA
+#H031
+EEICS IEPUK HIAM9 ANSEH
+ˇMLAS JXETT HE8ZA NSAI2
+TIRKD IHQND D™NRS BWGTY
+SFDSO JTIAI INFEP IJEAR
+FRA?K ?IWSS EEVIB
+#H032
+STKVB F¸EGL UFRHC GS?CI
+NSZK7 TSG0T EEEˇI UTAIR
+MMTN™ ISFSI HMTE8 ZISIS
+HDPSN SSRDT UYTEA NES=E
+TTEOD XAAQE FJWUA
+#H033
+E8TXT IIZMW TLSWR PITSK
+XSTIF ASMNG MTHJE OTND5
+IJTAE USITB A=NˇU ARJLS
+EEAHE YEUAA SAQLS ETTKV
+HXDS8 ™RˇHE E2NCP
+#H034
+ANNTY FDRˇD 5LETI EVESB
+UIAIJ ?ARTA EOYSˇ SGZEA
+TAMEI IEA™R /DAAR HP?DE
+IWTNE PWIVR NPW4A CFAXN
+MITIM EJHSK IQIS¸
+#H035
+SEO™D DAIGM 3EITN SIQ=E
+EUSDL NV™NN SHYUT ACEKE
+SIGEA UAE™D INNEP AEIFU
+XTBDZ HS8TR RˇJ2ˇ AIIAT
+DTNIR FNDDI ¸ˇT8W
+#H036
+EMHDZ FDQN5 5IBEK SSSEP
+Y0RTS ANNIX WDIGA AQCNV
+LHHS™ DE™IJ ETREI SHOAU
+SAEER PUUEA XTAOC T7IIH
+TˇTYS T0TST EKSNI
+#H037
+ˇIE™Y BHNGE LSLNU GˇISU
+SSQAS NCW8M AETIA E4XTI
+TUAOJ NZR2T E™IAT TUUFG
+EETF2 ASESS KADCO TRRN9
+HSVYD IDTPR NEITE
+#H038
+DDBEJ E™H8R TADA5 DSIHI
+ZUPAS ˇODTI EAVTS YTSIM
+GICFE NIREZ QNAJI NESAJ
+ECKTR TTVˇ3 DTSLA EAXT™
+E4NA5 ENMWˇ SYIXR
+#H039
+SOI6S K¸DTP AKWNI IXDM™
+NN™YB TFL/V IHOCE HIZQS
+TNDTL UE6ET JIUAI ERTNN
+H4REG EUAAT EAMAE ?IˇSA
+ZTˇES MEPJN NTDNL
+#H040
+NPRXN V™ASR OAGJI IASWE
+EME2K ZEGDS MD9ZI EAUAI
+OAESN EZEIA TINSH QICT3
+TRET7 WJBUY NˇSTA AEITH
+S3DGL TQOIU DRTNF
+#H041
+MAPTE RTˇˇT MLTNE IYKMS
+IMZE™ HNAIS TAEXE 6QBNI
+QSTEU MGEZ? HEWCD NˇARS
+AANV4 AGT0V UEFTR IP¸NI
+DN5JI TMACS SDIEO
+#H042
+ˇTMTN SNUR8 DA?SE T™TUJ
+SEFNA MESMT UETWA OEVTZ
+VTYAF NMFHN ILHPE TFCTQ
+TU0TC A/RVN NBRTX EENAO
+NK2ZE NTEND CTGIM
+#H043
+S/SUI TSEN0 INGEP SˇFFS
+ITNDP HN8CT TOEEL EAˇS3
+NSEST NHUTH RAKNB XTXBQ
+HPNAW TTNEU DII™Z RSTET
+VYRFR PHLHE MIE8J
+#H044
+DDBKN 7IXSE RTMAT INNCS
+LENTT ONAHO PERKR EA™WM
+ˇEA™U FA0ZJ JUIˇM SNE1E
+5CHTE NITTS GVRTM XNDTD
+NAFNI 8IETI ANYQE
+#H045
+NTJWF DETT? NEUNP TLRSS
+INOIN USNF7 TQEMJ VMNOA
+EIUI™ T8WYI IAAXU EENZE
+HLVTG KS8AM RTNBS RDHS™
+EˇABI RA7EC EIPTG
+#H046
+WIKME ZRUI¸ 5DIIT EREXO
+RACPE INVOL EDIC™ S?ITN
+1RNET =DEXS BIYQA NSESG
+ITNAU SANHS HUQFA 5ˇTTS
+ˇILSI AODEN SJ™DE
+#H047
+P™EEˇ NBEEA MYOUS RK™OE
+SI1VZ YTUNI SR=TM G™ELN
+DSEIS TASMA UAPA= AAHTS
+DI4QN IIEFT TGMWI ZI8RT
+ESXGR SHJSC SKTEI
+#H048
+DKSUJ SF4IT NAESI SACEZ
+MCZQU HHUBS PTVE7 NOSNE
+?TE™M ?USAI UXNIW BYLTE
+O™SKN ˇBTLI TUAGR 7IˇUR
+SEINT ESYIT IREES
+#H049
+NUWEA ASTND ™S™LA NVHTM
+SENME T8ANI BOZOT ¸HESE
+EHSIE MINNR 5EEDM TXATI
+DKJ/T CK9NT YTS6U B™PFU
+UEV¸S TNLNI ˇGTQT
+#H050
+TMSSE E9IGA BL?Nˇ ITH?Y
+EOTJN ™ASZI GEKST NNIAB
+PRAM1 MJHAS DAGTR QEETS
+GTRRA EUEAI EXNVT NCIIF
+HKX™H UTEˇA IMSW6
+#H051
+UTCS™ NNEKN WFERY SADKE
+TEANZ JLAUB RTAE9 BHGII
+VRSET IDNXU SI¸ED SPˇAD
+SUIUF QEEUI NJJII I9NTU
+AE1H8 OANIW 6TINM
+#H052
+TEKIT GˇWWN EAUMC NPMUR
+ˇ=ENV TSIII S™MSM ISCN3
+7BTHI SHDEP NLACL TATZN
+DEQKJ AEUVE BIRNX TSEAD
+RDA0F OTEIS 9ESNY
+#H053
+CNS/A UTW9A ˇZIEI IHOTE
+MINIR SY7IX ESNYJ QPKI™
+ATNAK REZEV UHISG RKFAA
+YERTA EHUDA ˇ/DIO ˇALST
+NEENT BISAI EBR8D
+#H054
+FECKA REIˇK OIENE QU1ET
+J2DIR 1US5N GBJEV TUZSN
+GIEAP TDSNT NSZSY SEAHI
+HEAXL E™STU ˇULSS 8TSIA
+DˇIWM VITTN SR™RI
+#H055
+NTAHE FAMST SJSIA X™ETI
+TEEM/ TSSB9 6METW AIIKN
+OCAGV TCLAZ ANQM™ AE™ˇN
+EDEAZ HEWˇR SAT0E 5SIDP
+DDDIG TYHLU UIRAK
+#H056
+QAFRE ADN™N MNEII ESSWL
+DQNTI NIYEI THUES TNNBI
+AIQSK ERTFX OUNˇZ YTMUM
+AI8EP NHI/M PEE4V GSHFC
+SAE9T NZ/TX ISBJU
+#H057
+SITNM T9IML IIEGS RBIXW
+FPMSC DUETI VTSSS XJIIS
+EAENS RGEDD Z1NOY NEJQ?
+IRSK3 AGNET NETNF FTENH
+SHAH™ U™ˇ8E IKBAD
+#H058
+AˇNBS LTHIW UDOAE SDH9I
+IVCQQ XIAII XRETN SKARS
+ARTEF SS1EE IPEE™ FS=VT
+EWIUI KR1MG SSEZM FIANA
+SH4YJ MSJEI NDIOT
+#H059
+SNEEP AMNDU KEER4 EWH8T
+TNYBR ADETA E=ETD IATEN
+MNIDT IZVSA ASMFS LSIYM
+BˇIPI ONQNE RVV™G OA6™M
+MNJTC II0AX IMIZZ
+#H060
+NNENN IIT/N EST9ˇ DIUIZ
+TEGWY NLDAE RNIUE 3NARM
+TISKS UNXSB IMRIR YO™NK
+X8AEE TET¸D A4QEE HPFTL
+CMVHA BTOI™ SJKSA
+#H061
+DBEHT GCATI DIAZI UD4IS
+?RFK1 TNHNY HAKNS NNTMN
+ENJLU 0TE™E EE1ˇA ITOSU
+EEXIF EXMOP SDSSR TITPA
+ASSWI TSREZ ODBVQ
+#H062
+SAWIY =Sˇ™Z TT4AE AECI™
+I9EPE XEINN ENTA/ HSNIE
+DTAEN 5KHNA ISICE VJASU
+MKMSV DIITM RBLDG UTQUQ
+OTNKC NRAMW MFEˇJ
+#H063
+C5ANI MRDNM XJPGI WOTAE
+HYESC T0NBP ISUTT F™QAI
+ˇAERH NUTAI RTD™L ETEOI
+VEˇUK NSG8A NEAN2 EITNI
+AOENE IC6US ZFMDU
+#H064
+AEMIT MWMXK DENNG GRI1™
+ERGAT ?SEAˇ OZFER MUMEI
+SVTII S¸RIP JANIT TNILS
+JITRQ 35WAE SEFUA PJBEI
+NNNN? HAYIC NˇUEA
+#H065
+RZISI NANSN /IPAH ETSMN
+OTENR TXUDV CHT/W S™TVK
+ATEJ5 NRTFD AGZAQ IVLEE
+MSAEE 3PP™N XEXSH TDUED
+IBQIA EOˇSI II2YR
+#H066
+EASTL NIETT NSQTB E6ZF5
+GE¸ST AHEMˇ EXQHK IRTN2
+DJAII CXSDS AQMAˇ MFTNX
+SIEAY DTFOI DEBPR 8UVSE
+IT™MW ANEFU NTD3A
+#H067
+CTNHN KBTOG NSEBL HIENE
+ZDNNI IZARN EˇRTI GSMPD
+TKD03 IENUT EUHMB AMW=2
+MJCAA ISFIC TZQEE T2EOY
+NMTVS EIHXS NI™AN
+#H068
+TWMKˇ FTAIN ZHERD ATTA™
+UMADO TSEBJ GASNE PYSTU
+NQEOJ AT4Q= AEAHE ENLDE
+MNSTF TTTMP CNSUI H1I0K
+BVNˇR TAEES XI5LM
+#H069
+STTJD 9WBTI HZKS5 1HEPE
+TDSNN LFUZP EOATT NEAAE
+DTARG SˇYIU IDIHR RZTNE
+XISHX FS™EH NE™SI ˇENE5
+INQ3™ CIMAQ NTVAA
+#H070
+HAEPI AE5KM E41RT TNHSH
+IAJXJ SONEA NGETN ˇCDIN
+NVSSA NTETF MQ™RL SZJNI
+TIA2S IRYHE UIUCI EFEIB
+EADST IB™0R PXHWM
+#H071
+ATAUE ˇAQST IAY¸U MGSXH
+M¸A/5 NZJEA IRH1O ™TTHF
+THNTT EGUEA IJIAD TKSAN
+ITESM U2EEM APENT ACBTA
+DEVYS W9LRT LAERB
+#H072
+ADINT EYJUN ANSTQ EUTUQ
+ZFNEH TEPIA NJ™HN G/SAI
+EEB4I AETMR LUXNN TBKOI
+FSETN DMHSD MIHEO TSEFT
+NAC1P IR0Vˇ ?TWPN
+#H073
+QTTMG IXTEF TEOEE VAZPS
+LNEAN HD™BE UFTNH SJC5N
+SNNRI ™=NDX UYIJN YMUIA
+USSIE IET9N HSˇAT ITEDR
+OMKA5 AT5OF QENWC
+#H074
+KAS5S LYUSN MˇR8O EST/V
+XVTIE ISTEN KXG™U ITAHA
+™8WSB IKAEU SUUL/ LZHAA
+CDQII IEEFZ IEUED TPM¸J
+ETSNT IUJSN RENIS
+#H075
+SNSAI AHROC EE™ZK ™SQTN
+ZTNHI ™IUAA 1TERI FJTBA
+DDYID ZˇMIX I™ASR GVSBI
+4NEEA P5NWB DESQN EII6A
+MI5DK EMIYA LEMAE
+#H076
+XRSRM IRT7B EIEUY KAIFI
+?FGAZ AEAIC EWEOR A™TM=
+ATNTI SNMW¸ JEHDE V™YNL
+NSENT ˇSDG2 INDHA T1WMI
+NVTEQ THNSN EIVAP
+#H077
+BESEM ATEUE HWTEI CTH™J
+ITSUS AZMTL GKNIH SXUED
+ANISX ˇVFR™ WRAP4 N?PHT
+NRESS PBTDN IQSEE ETAO™
+YSTNT XR1IN 85AIQ
+#H078
+ATTQR JKKSX NRIDG OTWDE
+NIT™E AEMZI RTESI VN¸DP
+SHIN3 ES5IL HSESO EXFAS
+ENENT SMNTR YLWNT RSI7E
+NAB8Q IHYU1 PUCˇI
+#H079
+RHNEK LUYFC XUCWE ITSEA
+ABMIS TAZNY LAIJE VSAEI
+™IRNM KDEAT SDEGS S8SZ7
+EATET TII¸O =RIPS JUR7K
+DN4QN ˇMFTI IENVD
+#H080
+AEPQT MIDEˇ NADNM TQ1EX
+ˇETMT NENKU LEERR ?T™AJ
+I?PAI ETIJO S™ALF WVFZE
+DˇANN AT4DE BTNCN SKGAS
+STATU Y6IMS MHIIU
+#H081
+Q5A8E NALRI TTMRI NIORD
+PQOZE IIBOJ KE9ˇE SHEHF
+AINAS SNTI7 XSTAD JEIEC
+RTNDT K™SRZ ITVEN WGTBM
+SEEAA AAH4A ™DYU™
+#H082
+IEEMS HNB3R IZTAR VSADN
+LCNXR TX/SK ˇSUIY DFISG
+3TNVˇ EYETU INSDI QAEWE
+NGS™P NUECN MIEHO X?JEE
+TJ5AI UOSIT TIPND
+#H083
+¸MAEI RIEAA SRS2E RQIVL
+INEWE KQ8MS AA9ES ISSSH
+UDETY EEJ=ˇ QIIDU NSAHU
+TZ™NR VRAIT NIOBP TUMWL
+TECTS NFKGG TXIS?
+#H084
+ETINR TˇFSI TCVFA P4OXˇ
+TADEE AEUSE HNSZD NA™BA
+GMASA YETIT 9NSEE WMRIR
+FDDDQ 7UUNT KTIMI 3LLQG
+ICECV EA0AT NJAAU
+#H085
+MENNK HRSSS EEOEJ NXIWN
+IQJET IUBNS UNFMT ILP4I
+EIHZI DQHST TKST9 SEDST
+NNNUI VEBRN MTA¸™ 4ˇTJX
+3MGJA 4NECE FYIHA
+#H086
+D5ARN ARNAE SEJZU TRSS4
+VIYAE UINRN 9TBNP USOTI
+SDWN™ DTNCT YN4EW IJMNH
+ICIEˇ EVIT™ EQXET TGLXY
+YEESS KFMAB 5HMST
+#H087
+ZSHWE ˇIJUE ENMIN QDNIE
+YNNTT NEADM UHNWI MSZEI
+NSYTC 9IDGC NA/XE LAMVR
+ESOE4 MXRI™ S5HII PKATA
+SQFBK INFST VMET0
+#H088
+3TEVN EAIOZ IMANI PTMTA
+ARMBK IO5EI STG7M U2XAT
+EODIE ™MNAQ TUSSL MNUTA
+PNEDX JXTSH ENYN™ JCNRE
+LE7VI NEˇZT SWIMF
+#H089
+LTSNL R1ANN ˇPIEE CHQ™H
+KEHNS TVHˇN IEAJS T/TDS
+AJEDT SXAEU T9BEZ NKAIU
+OYBHY EHTCN OTGUT 4UHAI
+TNII= ANIXE NMFWE
+#H090
+2AJDE AXHTN SATHX ZQTUB
+ZRTR™ YNSSI NEREE ZˇTFH
+ˇNOTI LVPUE TASNT MTVZC
+DE7ˇA A0FKE A58IM RTNCE
+INRIH SHWEI NAGEI
+#H091
+IG8UH JEXIF OAAAX NARKH
+QIDOE ESSSL O4REC ENICM
+JM8BW DCMIE ZIWNE EAITI
+TSDNS TK/ˇM AHPSX AYVIT
+™ETTT ENQAA TDU5A
+#H092
+ˇ/R¸P ASNSI DIIEN XFVEM
+TMANK ™SSAR LTEIE SEISQ
+IKTIH MTEUZ IQEBW VYISC
+SN4AE DHWYT STUGO E6EAT
+T94SX NNJ™A JUUMD
+#H093
+HNLIV TEITJ RHUES EQA0M
+XNEZN ETHTI USILA APZUC
+XFNUN ASIWW TR=KE AAAMG
+NVIIH AB™EN PEQTY NSPIA
+ˇD3EM ?COTE MIT4R
+#H094
+LNVWS AIDI4 QTAJI EMCEE
+MTM™I AEP9F DM7¸E HNUSI
+ARSDZ J5ZEA NMPVQ STRSS
+GNINY NKM2O BˇSRN TOTTM
+STEWT ETTES IXˇAE
+#H095
+A7KVS RTAVK MDˇSE MSUHH
+NE7TE ENNNA NEH?I NJF™™
+TTESN OIEAA A™VIY PCMUˇ
+IDOSK 84UTI TSIET IDNSQ
+PGIZI UEDLW XEBOI
+#H096
+TWESA TAVLH IR5AI AHXEU
+9TESN 0EFSI =NIEH HUSFN
+DSINN TRXUS NOYDK ™SQIR
+T6EIY ECELR GTNNS VSSYM
+BHZPˇ IEPXI KIUEJ
+#H097
+GNU=S HJETT EXWTV FSPAO
+RDFAˇ NNCUT VSUTK TINUW
+IQEBE IRIBN SN9EN ZFRIL
+SSSM0 KAEUT SU0EE EE0NN
+AIT™S TIDXI HYWHM
+#H098
+GPTZN LTNQ3 TTSDE RO9IS
+SBEIF VB™EV AAEHR JTNJA
+NWXEE FDEIS THHAT ?CMAI
+YIEUP 6AVNE SQHKI NˇIIA
+DIMMA ZUN9S TAXER
+#H099
+UHSTG JHSEL AB9CS SEIXR
+FUESZ IVIIZ TASEE N9YCH
+V2NMD T0OIA FCDTN ADESE
+OIEHI UEALI IIEˇR QIHDN
+FSN/P NAI™S TRSWK
+#H100
+KFPNN UTSZA MIRQS IˇTSX
+YA/EE NJWSD TGITL KIBAN
+ETIMO ˇAECE AMKSW NEVNX
+E™SMR 7IZM/ D3AER HLND0
+MBOBM AATTU EIIEI
+#H101
+EVQ=D ™NNJS CTUAA HQENV
+RSTUˇ A8AIE ANXNT ZˇNHE
+EHTET PKAIS EMDBV N4TUA
+EWZDT ACIEG E5I¸M YXRPT
+4IOTJ FHSLU ISTIS
+#H102
+CIEAC AHVSE MRFOQ EZTLA
+ISSWG ND5NA ZY6/R EQJIZ
+PEQAB IIIAˇ ZDSB/ EXAED
+TE™SK VUNNM TUSE4 SIMNY
+TTRWT UFIHE IDSIA
+#H103
+H™DKO OTJXD IEEHN FVNTL
+AWSHW DNIMG ESSIA ENXAU
+TSXN5 IUˇAP 0ETIP ASEB8
+SSEKR TEAEX HUQPT YUPNS
+ICSII IRZ32 RIETM
+#H104
+YEIEC CTMOY 7VIEU FIHCR
+ˇSABN SI™RD GHDSA AISZP
+EEEEA ARIH7 NQAFN IEQII
+WLNSE GTSSE NITD6 TULNP
+IKXRD IA=WU N9JAK
+#H105
+UA9PE WIGSZ VESEP JFI5P
+AQNRT EANNU HTSNX RBGIS
+=SIDE AHMIT AOOC9 GSLNT
+RAZEˇ ATELE ?UKHT SYIIE
+YTIQA MTD™N RHEST
+#H106
+SHSE? YGAEU EIAˇE ZTADW
+29LAQ ISIT0 WNBDI MAMUR
+HNHSW U™KKN ATAET NEFEI
+OHUXL CSVHN IIAIA NTJRF
+EP0II CWEIA CMETN
+#H107
+OITWI SSPQA ICSTA MNNR2
+HUSXˇ IN9JS CES0N NHKDZ
+TEPUE EEEGN ITKAN IREES
+WESDL MMONT YIYVD HˇDBI
+IURSF SSIT™ T=GE7
+#H108
+F4™RG V4EH= WIASS DETJN
+EENCQ ARINX NˇQKP GTIJI
+TEFZN RAEI1 RTXEI JBYGT
+TT3UI APOLS ADDSE ETNTA
+EDHDU ASSMB MSAAF
+#H109
+™HEAI TIAHL ROEEE SISI6
+THKEI ˇATD/ ASHEI NESLK
+NSJAS DAGZI BTIVJ IS=AS
+PYRZA FA™6O WCEAW QUXTM
+NMERZ D4RTT EJMFW
+#H110
+H™ENT N3IOI FPU5S NEAYS
+TIR4S ™SSXI TTUNL DZMTE
+NBILA TESSE SRUNK 8HPOJ
+8ETEA MEUVE GETQN FI¸GT
+AHDDC TSCYˇ WNRIW
+#H111
+IGNTA IENUS AFIMH SIUEN
+VHDEY ™RCI3 7HPEK MS™II
+ZUNTN CVCIH OTAEA JX?N5
+DLLZS DRAZQ IˇAIE WLENY
+AAIES SDEIE TBOT8
+#H112
+SCLUI IMREI ZNETS SPIPD
+AJJEH NVA9S AEOES MKTZG
+DˇNRW 16NMS BREM™ ATXAR
+ETLOY TISSH IES0S DETIO
+YRATB IE5TQ SFTAM
+#H113
+QHSAT ENETU HSTTE BHUAT
+¸T™TK UHFEV PTSJA LIQNZ
+S=AAT UMD/F WEOII OCSIL
+JSHXI ZRNT3 SAIBV SMEGE
+EUˇEN ST/GS ARY3E
+#H114
+7OVBS IPANO STTAT ZTZ?7
+NDEME YN8™J GERUM N6BAI
+UWUIE QHXTM TNBUT UVST™
+EICMN LNKEM ESDIU IAEAC
+EˇVFX A™AET AIIAA
+#H115
+GEXIˇ ˇENNC N™EIU QMESA
+TI?J? FTTIA DATNN A5NTR
+K1ENS EIHMI ™PINE OSEIH
+UMTCS NAEMV 2AQRC SAIYE
+PULKW HVGTB RZTAM
+#H116
+HXTIB TTNNR 8ACTM G0HDB
+ORTAF EDEEN VTFTC ESLEI
+BOT2I EQT3D NHHJE NAFUM
+USZWP PSR?T ISATK EXSIN
+YETAS ˇSNM™ DSSKE
+#H117
+NOTEE SZ7EA UUNTO AˇGHH
+EAIDC STVEH E7KNE IGDNL
+NEXJO MQTIF N?QHS EPNSN
+YACT™ TR4DT ARLWB IMNSJ
+VT6EI TXNT™ UIIRN
+#H118
+GXAEU AJEYT TO2ME QRVFP
+EEWTA BETC8 CTJSI ZUHNY
+UEIBF ¸KIUH SSNH3 ITXIA
+AEAIS ALNIU HUTUI NˇA™H
+SS=RR 3NDIE AEISV
+#H119
+IMCEB RˇSUK ERH¸R INNBF
+61ITT FTTVE NAAES YAASL
+E1WBU DDU/X TAOGT LPˇWT
+NITEE 3IMAU ZATHE NTQTJ
+S™NHN SASEJ UEAJI
+#H120
+ICNQS ESPZK TEEAI EYTKF
+EDIN= HT6U7 DJNˇT OF™UT
+BAVVT ESOGA UASNA JSGIR
+ZSEAˇ IGSWA MMH9L MT™XE
+NNT3R EAHTT EMRIN
+#H121
+SOHTX DAYNU TDSJ0 SNBTE
+KNTNX MEKID MS4TQ IEKIS
+ESVTR T™LSA AAZNA RQUS6
+FWˇLE ILA3G VEAˇM IS9RI
+ITIME MNMEE CHYEP
+#H122
+PSTBE SVITN N6ˇ2A TDDUO
+ITITW OZY2I NTRSQ XKISY
+SLENL RVHAA HETHH 2AUJU
+RFASG NTEX™ EMENT EVIPS
+TDE/A CSEWQ ELMSI
+#H123
+ETZCE 2EPWY SSMVN QDMES
+5MOIS DSI3R NUUSI CUNFH
+EˇQAB TTMNN ITSNJ ILIUI
+9™AIU IWIII XNXAE ASHEA
+FA1EX ˇYGSB UEIKE
+#H124
+™LOTM BETED MWMPA TNNYD
+EESSH HRIYA NE0TM INAFQ
+UTOSI GˇP3S E0VET HNDRE
+S=T4S ZIˇEC XKDTA NITMT
+ATHIN JAEQK KSNAG
+#H125
+EBNNJ UNAS1 FI/TX RRUQY
+=EMEN IAR™I VOECA STI=N
+IMZEE TUAIP EOSGH TTATI
+NTSYN XETTD HSWIS PAKLR
+RLVAA EDDKS 9BEˇJ
+#H126
+VNQ8R K™R9I IEUCS NASER
+FVN6E ELRTE ˇUJKI WHNIS
+TZJYE IDBSI NXGSE 1IENA
+MIHQA TILXE NNMFA INNOU
+AATSU T9IUG PHGET
+#H127
+UIRS? EXIYY VˇKMG /AYHS
+AE5NI HHIEL ˇCIII TEIAM
+SWS¸F MIIEP OSSIB SNFDE
+HEMEC RZEJI NSKIU HTNIQ
+I8N5¸ NAEUN M™NVN
+#H128
+NWU?A OEOSJ 3EPKE ˇTKXT
+MLIAS QIUUO HCMIA FHN7I
+EYAER IVIEˇ JUSKX TARAT
+U7DII TPN5D NANNN MTAEB
+ME™ES EAGCS TITJZ
+#H129
+NMSEQ SSDST IQ™SM AAT=W
+U8ZEE BHVEZ CAMDU IYMOE
+NPSTE HFNGS TTITH ™SWIA
+NTTN= PSC=N EIGIU LTIˇD
+EKEXA ICRKE ˇAJ4R
+#H130
+AUTSM ASAˇZ FRNLI IBNCP
+IICEG ¸OJNV VEESD ISKQT
+KETET JIISH 2GXIN SEUMT
+N™?HY RS3ER 56SAI EWRIT
+SEEˇ™ NHZRS DVINH
+#H131
+G?MUR CEˇRG DAADH SIJET
+TETVZ STAO7 ENST8 NATAA
+LDKˇE EYIBX ESSR9 QTFUS
+TIAC™ WNODH RAIEZ SKTRX
+ANMN0 BEEIT IIPAM
+#H132
+I™SOY NM™ST TUTXA 5NIPK
+EREDS NT1/N HAENT UHL¸J
+TEEZD T¸RIY TEHDI DAFGD
+EK1VN RAIQN SMMTA NEEHS
+NˇBIG IWN9E UINNC
+#H133
+EAALT ANMDA ENUAE EIˇUE
+IRYQO JCPNˇ BNASE ZTKHS
+SBXMT FWI5N TCQ™O ˇSRDW
+NGS7D JITRN E3UIE A0VID
+TETTE HITA0 NRNIH
+#H134
+RAAYA MJDNO EBNKC NLQMT
+ETITS NKEXH TESUS WXGPP
+MIˇRF TˇHNE 7FAˇZ AUH8P
+HA0DE N4SWA ESIQI IIE=E
+SI™IR UTDVT IAEAT
+#H135
+6X¸MN ATHHT BIIBI EVREA
+OSSCR SFRNT JHNRE LDVTA
+WEZPI HKSHA HX8Zˇ ETTNE
+TNEAI SUIGM TKAˇN X™ETH
+YR4TN NTESE 0?FSQ
+#H136
+RRQ4I TECXJ EWJM™ TUDMS
+FJˇRE I8CAD IAANE E1STT
+ESRIA NSIEQ EIETS DSTAT
+ILGEK SAI6B CNAAN DSZAM
+OFPBH ?GTYT RDAPV
+#H137
+CPEEY ETAEU FHDUN PTIGT
+?HSK™ EHQN2 UDINH UNSJI
+ZNEWA A1QTI MPDAE NTNEY
+BSIUS LTEXT ETISZ S4VNT
+AˇO7K IRMPA WIWAS
+#H138
+SMYˇI EUQLR SSPJA EUINT
+EAVHO BNIIR YETEA EENIC
+™NTAD PZNS9 NIDOI /GSTE
+ˇ0EIB XMEVT MSUNF AXSFH
+WK5VM AINTU RMAI3
+#H139
+AAAIZ NNGVE HXERU K™ICN
+ˇHNIA TEIUI TWDEC SFAAG
+NFT0E UT3ST MAEIJ AHHSZ
+ELDBN IDIDX THUNC Q4MSO
+N™TYG E7IX5 EESPK
+#H140
+ISWSI INHAH ME6TO BHXAT
+VEANT TEM/D TMNRT AENSE
+HXJST ˇIWNT YFHO2 N™4IJ
+SOLIE QETTN KGEAR H0NYA
+ZEECM NFDIZ USUBP
+#H141
+EDOHG R?FIN RVDAI SE9TH
+QESES D2ISV NEMAY 7ITOJ
+ILNSN SAZUU NAMEE ™DKTE
+CT=DI DSPAS OFEAQ TIETX
+NFIT™ TRSBS ˇPVWT
+#H142
+XRINE IN2UQ OAEˇP WEEAE
+QGIN? SHSAK CAURL IUEYA
+THTHN IIAI2 NHGTV XIYIS
+E/EJI VTWNA E5SMM DWUTA
+FZTMZ CP™HI ENBSS
+#H143
+EISTI PMO6H NTAAT GEXNS
+MTEEB F?J=N SQLNI NQˇE¸
+GNDES ™R1AI KNUAE SUNWH
+YAHIC NTGZI SA™IM XDSFI
+TTLVU EˇD7E TIHUE
+#H144
+INRN0 IKIAR XTˇSH TZNSI
+EWA1S N¸DEE ARTIG YH8TM
+AIIEQ NMANE CMENI F4APH
+MTSEC RKMIA SEOVI FESFE
+TAI1D RL™JP GUSGB
+#H145
+EXZLJ SNNˇL FˇMTI MDL9H
+4SLUR 7IIHS HRSOI K™E7A
+CENTI EISNE LNUME IPABE
+ATGFS S=EAI QENUR WNUEP
+CQISQ TTAIA TYSRV
+#H146
+EENTY LTIZF EP6KR IACUT
+HDWDE J=A3G QNDEC ESFBN
+HXA3A NIIHH EOVDQ MTBN5
+SI™EM UˇNNA NITI™ FSMIG
+CNPSI ˇENIA PEINR
+#H147
+TPERF STWER OFA3Q SODRI
+TIPUI AV?ST EHIIF NQRNH
+SMEEH ANEYE JNETA ATM5S
+SEAˇA ITBI9 NGXI™ SLCGU
+M1ˇKH CQZET ISNRS
+#H148
+EBYEC IPMXR AIK8E EFEVI
+2ASNE HU5ˇE AGIHH WTSSY
+SHQTE M3XSO ZKNUF ENHSW
+NLRDE NAIIA PTMIA IJTTˇ
+T8BNI N™UUS ˇJIAT
+#H149
+HTMNN N8SDS SKZI¸ SDE3X
+NEEIM AAUKI LTˇTM JOIEH
+DENIS OGIEA YSSˇA HMI™E
+IQBFA TEVLE 5S9SQ HISOD
+JPCRL T3ITW ATUAE
+#H150
+NUH9H M™TQV LBPLI HˇSNS
+JIEZO AEMAF TE0MT ¸BEXT
+PIYNR TIEEN DES6N QHSˇI
+ATHCS ETSDA Z5AII WT7HE
+M™SAN NISGK UNRTE
+#H151
+SGIHU WRFEM ˇJDWN NA?UB
+=1E9T ATIAX DDAZN ES™TJ
+B™IMV RENSN QIIEO LGNAV
+KAYTE NSIPE IEUEA KGAAH
+CTWTD 1ITTT DDNEN
+#H152
+ZVMNS SYI2M FTOA? I2NNY
+IEHNE EAUGT PUEAN EMBRT
+PS™RV /SRES OTZEI UVWˇR
+R5QJA FIKXS SLYTV OTIEH
+TNCAA ETUNE SDITT
+#H153
+MASDP NTRIT 0HAˇA EIFL9
+TSENG ZDNDN 0UULS AIRUN
+TVNQB IYDEG LH0WE EITNV
+KUNFS GIN™X SEWTS CGTRE
+TSEJE T8NTO UEUIN
+#H154
+NTQI/ SNTˇI SISWN RUEQD
+ESEEY OXNI™ JKNZE MBXEI
+HE=TA XNEIL 5NHUW IEMDW
+CFTLN SRNPH IDE4G CHNNH
+TNXBV ST7IA ™AUˇT
+#H155
+MSBLV =HEFR SIEI2 ESSKE
+IGNZU IEDˇH HIIOS SNZEI
+IHERA KAEUJ I™OSE NN=RN
+H4GJS IIQBC CWDAT HXAAT
+JEINY ICNA2 TUPGI
+#H156
+ACPAQ TSIHT C4KLN STNSE
+™RTVE DMFKA AET2G ERQU™
+YBIED ZWXAN 6IAEM MHURI
+™PVET NUSIT TXDIN S4INR
+JTˇAQ OSEEA A/TVE
+#H157
+TATSN RUITN THTZM EETIL
+2AEZE QOISN SDMRP N3KDN
+JTUEC CGNAT LI™XV MTEIW
+S=NNA TENBS GQYR2 LSELH
+ASEOH FERTQ ˇKI/H
+#H158
+QSVRE ™IIM8 JSSCN UHSWH
+HTAYS EISFM INZGI IIETI
+EMEXU TBCEK KEIKN OANDE
+UFCSU DMLSI ACNPI EIEDˇ
+UA1IA VT0SN 0LA=S
+#H159
+ICF7H MREEZ IAˇAS NIN7Q
+R6EIU J¸TIW SIASI SET™J
+ETSNT NN8IA ™DBED LTR¸T
+XTESI NVY=D KDSNE XSMEP
+SGI¸H ERAAU NNOUX
+#H160
+THDTI DJISA AHAZU NUDEK
+DNSEA I5ˇOE METIF ATISE
+OSPME NNJX/ NGI™E DVF8P
+™SVLE 6ISSR 2ZCBW AIQHT
+ATSTN REYCI TZCEU
+#H161
+/JEKN LYTTX QCRMT IETDN
+ISDP? TIAMN ™OAMD ZSˇE?
+NEFCU AIEUH SIECR 5SENG
+KXRAA IZPTI TARWQ XQDˇ5
+ANINI DEEBN ATEAV
+#H162
+ZTADˇ AJKDE RUFE™ FNSTZ
+ˇ1TNT TEEWT P?GNE ZKETH
+HIUNT ALJNM DSNON EULIN
+VE1XE B5RNC SITUR TQ=YI
+SRTNM NOTEA SIAYN
+#H163
+INPMR YFAS™ HIERW QKTWE
+HETES ˇAAUS T™THH VDAHL
+E9SEM IENNA I/BET OS7EE
+AAK™W ¸LU9M ATINR TGWTA
+I=NID JZSNC NIXGI
+#H164
+ZVEIU JINAI T8TVE LHAUN
+UNNED TQMZ0 O7HIU LSMSE
+NSEEW AEAIH ™ˇHSI FSRRA
+CIPSˇ INGYE VT¸IE DD7KO
+GTTTX 9SEAT BSADN
+#H165
+WNHAS W3PTA TXLUC ETNDE
+ITˇF8 NS5EE ITNKN AIEMA
+MQTZT DESˇI TXRAD VJ2YI
+RJUAY BI™BN EOEMA ELTET
+SFSM2 AMSND TZGRO
+#H166
+ˇNHTA 3IGES ASN3B JTRAO
+DDTNE E™XSO J4SAE HNNIS
+YQIOD TUGLˇ N1NMC NIQE/
+SKVIR TEDHU EKFBP UEZER
+VTAVT EIRIS AWNTT
+#H167
+OUELO RNESˇ EˇTE6 PRSGH
+MN6CT ESBAE RSFAI TTICI
+TJISF YDMVS XK/NE ITHSA
+ZIIQB WLYS™ HTENM MJSNN
+SY6TE U7EMD VNSVT
+#H168
+XN=VS RESES ESDHI NW8A™
+DLE1I HIEGF RAESU ITDSI
+EYSQ? AMˇID IPNNS JRMNT
+FTIEG HOSIA ZMWOT I™AT™
+T?UˇK CBEWS KSTEN
+#H169
+NILTK BISZD ?2ˇPQ EAEHT
+AIYUE ARURG IFKIM ˇESD™
+IASDE SSMET LIETA XNBNO
+NSSHC NSUR9 VA8UE IZAAZ
+IN0EJ DDTWE KTZTT
+#H170
+QIAFO XLTHH 1MNTA SEEN2
+K6NUA TITET ETNAA IGMBˇ
+JTSKT SEVIS AL6XS MTJE™
+T™TQU CYSZE A™NAM FRTYE
+EPEU6 DNWHU DISRS
+#H171
+8/JXI NE6TC ZUTAˇ SETDT
+DOMNK ˇˇTN2 GJFTE PTNEH
+AˇNAI MNLIˇ SLAEA HJBVA
+YAEF™ EHNDR A1RGW MIUNT
+IUIRS NTAEE QTAEI
+#H172
+ODDTW H™YNF =SˇEG UZLA1
+DTEVT MEDS= JAEES SNTET
+PUVAT TAEEH SXC1T KINMB
+VUTMI N2D™T TASTQ AEYLG
+ETNˇT USRAK NOAIA
+#H173
+JDNU? HZNIV MNKOE C™BES
+ZNFUZ USNIE SDCT7 NIIYQ
+RT=EO TSIDE TEITS TITAG
+NNMNU ASEML AXˇIH NMKVV
+EWEE0 IASNP ZM0TD
+#H174
+HI/KT EˇRIA SEATC TWXTA
+ANPNE SNIEI GSWAE THNSH
+™ASLI TEMDY AF0¸E TAZHE
+ZRBI5 XEDHR EUUMV CQHON
+STTTJ HWPO0 A/TSA
+#H175
+ENOMQ ELTTU Hˇ=EI T=ETR
+YOUSA NE8JI TPTRT GNDBX
+EEKET AIMRV S/G™X NIINW
+AVSJH NF3MP NTDNI IASNE
+EOUKZ AYINV CARUN
+#H176
+ASAIY VTTI9 OHILE ZTSEE
+Nˇ8RD WXESM ™TM™I VM1SA
+UYNER NNGTA EL9HN JANPS
+MUTNM GAUSB EFTCT T?KKL
+HSSWT HADTE ETQIE
+#H177
+SANOZ DC™Rˇ HTIIE ESIXE
+HJˇAN N¸FYH CNITR XNI5L
+MANEI IDQKY 5NUES NAPNB
+MWI2E EATEW XGTIY SB3VS
+MNRU3 EICTE RTIHA
+#H178
+RIFS= BU™IM ATRHT IHTDS
+NSAIR AXVQT EEM90 BMEL2
+SPˇCM NOEZU SGEEA KZOAU
+TNL9T ETAAJ OEYZS TAAUI
+EUTGW TTNEI LUAAA
+#H179
+3RCRZ DUEEA NBZII ˇAPK6
+S3EET NE/™N UCHI/ EEILB
+ARLNT IQ™ST SCSBT VNNIN
+IDSTA IDNSE XIWUU OBIJU
+ISAWM SGEFY JLDED
+#H180
+HNSIM T=¸EH NM™MA THVˇF
+ETCHS GLAJT GENNE EE=IX
+GABS0 TSˇON HSSTI ANEID
+NTQUI WTWMR ETRS2 BZTON
+KAIPC WYSTD E/EDR
+#H181
+XNISU TRTFI SPˇHE IAYAV
+K9MLA NMCED GEZF™ EˇMYV
+UUIEN NB/HT NTSIE OA4NI
+IEYEA QWNUX IIJRA ES2ST
+TXTAN SSMDR T0HEK
+#H182
+EFXN0 8NERB TPWIS ATOAE
+NCEIM UZHTA UMTAE CVRSQ
+WNTAG FSRNˇ TIEAK ™ALHA
+GMSEG TTHXS T?HTY TNMIE
+JNE3D ?TEWˇ IUSRZ
+#H183
+9EXEA D/TEM HTTST ™SBY7
+PETLU VIEEM HNRIˇ NAGJT
+ONA¸3 7UMAS FSSNV CZETK
+ENQID SNINI GMNIW ESEZT
+YMKHS UIATT WˇDN™
+#H184
+TZE¸T TSTAY IIESP NOEDL
+JRE9T ANQUM IETSˇ AUJRO
+SCHSY N™ISA 5TPDE BDEDE
+FGCAU ™VTAM 5ETKX 5STWD
+IININ EDNNY CNH=S
+#H185
+MVM9H T™JII TG98T RQMWT
+LIIAU SRETN TLT9ˇ UZNEF
+ATMSH 9HSRN ADAMT NIEQK
+SSS™O ICEU¸ PYBRE ENAAN
+ESTAT UUXSM EEAUE
+#H186
+IND¸9 RIˇCB EˇTPD IEJHH
+TAFVN E4ESA SXSAO S1THT
+TF4RY VTGˇN JE=SI NIASK
+MUAWS IQIG™ HSEWE URSEI
+AISLH MTADZ YEINE
+#H187
+IATGS AXJIM DOOED ISTRT
+SQK4G PYACR 5OTTA NRIRT
+VYBEE ZXTSG DLUAE DTENM
+MPN™8 4ˇWAY SATTI NINME
+H™EET 7NASF EE™HN
+#H188
+2YSEN ASXIA N™EE¸ GIAPA
+TE8SH EESOT BNTNR MTVST
+LAWHU EECYT ZATQH TJIIW
+3URKT I?FOU OUENA INEˇ™
+RHHM2 ADAMN TMURT
+#H189
+QIZII WJR2P TCURS BAˇSˇ
+8KSHR ˇOWSI HYTE™ FSXMU
+TXVEI TMETD JSRNE E6ERL
+SˇIUT ES5RN IKSN™ TETTN
+GENNF NSSMC 8SEAI
+#H190
+ATACD BIZNK IE™YB XNIJ?
+MAASS AIWEA ™VHˇE ARSHE
+SDTLK ENIEH MANEH EHTIE
+UGSSR LNTQ9 OFIRI IA62W
+EHIA9 NUUIT TPQF¸
+#H191
+FRLHI ˇMTTR AMS7D TTQBS
+FS7NM 2NEPT ˇAX6N SHNIS
+MAEPW TMYIZ CSKTN ORKIS
+JNETE URIPR QGEYˇ WEEEE
+NA™SH A3VII EIZIA
+#H192
+VENNY EWCIB 7HUII TISWN
+MHOWD ZIIHN TNITS FEUAB
+ASEDE AMKMT ISQSE ˇTXAH
+LARRˇ TDPOT NNNMA B™J0E
+SXAEE TY5H7 EGPA1
+#H193
+MTEEY N0EBE IRSDN AEIE2
+AUSCA JUQCN HODEE RTKLI
+SENSE MTM8H FNS™H NIATT
+NZ5HO VWBRA 0IHIA ITIAK
+SGCSS TTRˇO PXTPC
+#H194
+OIZRB SNIAW PSCAI AHENI
+SIXDI 0AEHM FDVRT HQNEN
+EANIˇ AHHED UAVTL YGSEE
+UKITU RP?PS AGE™E IJA2H
+?TAE3 IKTNZ WIZBT
+#H195
+TJXRI SUDNA NWE=F SRHBD
+0IBMI ™YAAW ENQXH L/ATS
+HZTSE QUCIG FTIKT SNEET
+MENET IUˇEN ˇST9D P5HIS
+SZSWA HRNVE IECON
+#H196
+ABEIS HTSKX OLB3O SMSHˇ
+ITASA NNIBF IGYUT UMINT
+N™T=D VCZNI TEAAE JNEAH
+RHJT1 HSAES EHIIS ™APEF
+QEXR? BEOUI 2WTUE
+#H197
+CMNIˇ ATBSS UDZSZ 8RKAC
+JENAM EDIDE ASNEC 0TZUL
+TH0G™ YVTFA EEENN TESO8
+TSTML USRAI 5KITZ TWPID
+EEPHD QTTAH NXTAN
+#H198
+GTˇEN RCETR IINMT WOAWD
+7SFNA 0SK1T EIAIP EH9TC
+AEMIN EDNNB ˇYVJO SPIIA
+RBLEE EHHTX TESUH =AS™ˇ
+ASZQH AMNKI IRTSM
+#H199
+UVIV2 EE?IY FNRKT STDER
+SAˇJT ED/DK EHDIE BTZIL
+DE0IS NNPMI ETANT ANP8D
+ARPUS ONSM™ ZGCME GITFS
+MWNII QˇTES AAAXF
+#H200
+YNRXX UIEIG TUTSQ E0EBˇ
+AVCRF A?NTT PNSOH FWDD™
+?CMMS IANEW UG/EE IJDSA
+TIDOS NITIT TSKSM EFSSR
+Z¸EDT L6MEA VASET
+#H201
+I?GAN ZKBRI ENIUE ™GHST
+VˇQIR DXTED YXLTI 9VNEF
+SAEME ADIDW YAAT6 OIVKT
+ANSIE 9IEˇS WDIDP MNHAJ
+YNUAR EETSN TCNS2
+#H202
+EJTND PNARU BEZTN Y™ECW
+X2DTT NIREC FENˇE SHN5L
+SENIU RHE/M ATQTP NAIUX
+NAMSC DNIIQ 5UDEK ˇA0IC
+UEIVG NFINT OTAQT
+#H203
+SJUQ= TIVIV NAERE AA¸NE
+A2ˇSY HES8M CU™AR DIEHD
+LHATQ IEENI AIUII WEXKR
+EPABJ MIAIW SZGEN FIUFA
+WBIS3 9OUNN TAFII
+#H204
+ETNOY AEMQS NF9NN ICTSM
+ISPT™ ZEIKL N1ASE TEMST
+IHDTL BIGUM WFAW/ IEESE
+IXJˇT RA8SN TINHL VLE1H
+AMDTD ™WE™V DNRNN
+#H205
+5TTBN VLMCE G0MSN MSZED
+AEUOE IISGS PSREF URHNA
+NNUOR 8TXTA ¸TEWE SILGE
+S3UEA Z™RKH 3SENP JTITN
+RAIII ITZMZ ˇYIQS
+#H206
+AEBIN GSXHC NˇLAO STROT
+DMIBP SDPV7 ENNTI WEAT™
+NGTTA SANE/ YETRQ IENIA
+NRI/I ?EPDR UIZEI PFUˇ4
+DYAEF KEQAH MDTJN
+#H207
+SAHUW ™QEIE AITSD 4AIˇE
+GMWSE YTMBI UN5EZ SRFAK
+DHLER TNISS RTSAI SZVTI
+A0TOI =XAF? OECYD ODMSE
+JAIRE EDP™S ZCISI
+#H208
+TIIKU SHNDT E8NNE E7EDT
+6NPER SSU8S PSMPZ ARTOE
+SSUEU SKTNA LTGTL ISEMB
+IUTDQ ˇTXPU OVEND NYTT0
+TAOJN XVEHF ™IWAC
+#H209
+IINL™ HNNKM SEMHD ZHP4F
+WDEIS AIAIP TQO8V UX?TT
+IRDT= CSDEN ASMIE AT™ˇT
+ˇNV™P DSASE EAEMA NACUS
+ITAWI EYEVB I1EGJ
+#H210
+ˇZ™TT WSJ1T RSLSS NOETA
+CIEYS HSSIM NSA5U TEVKS
+TIHQT NEHIZ ETDUE ENI9T
+RMAˇJ UEYAE ISMGI EXPZN
+AHBCB /H?IL NSFHV
+#H211
+MESRD TS6JK TTGPL CTIUI
+ENSSN SN0DR SYMON J/WRE
+TEAIA MTQTN OVHIT SDNHE
+IWFRZ TA8SH IENEE ONBEN
+ˇKMWN T9IXN ™QMCE
+#H212
+TBNI2 IHLNN QNPNU IIIKN
+IM™TR QDIEE YCECO TA3HU
+NˇSSD IINVA Iˇ5IE DXTCE
+AJEFI ZU5E2 WXMSS AAZˇR
+XQNET GDMHE AENAB
+#H213
+TNTHS DUZET IN2TJ SNH3S
+AEQXT FEIRR NYMII RGGOE
+J™IIS WITN9 DEPTH LNSˇE
+E4ABT JMENV NNUVA OZCES
+NKNTK AIRE0 UPMSR
+#H214
+HTYNB OQHET AUULT E™T7I
+ISNI= JDTAU ENIPW MSFEK
+ˇEAGU PAUUL ZKIHT ™YO3T
+ELVIT XCAON I?MAE TANNA
+FAIER 3AAEˇ MSUAE
+#H215
+™ENPT TTQME GRUSL ANR3T
+KWESO IGEAC NNEAQ ˇJXHI
+9UTWA STNI5 ESVNW IHEEM
+JNDRZ ˇSENA FBRIE HSRIY
+MWIHI ZSNAP 37TTO
+#H216
+FLDSE NJCTM OHTEI CSSSE
+IHEIU B?MAW FNIYI AWEN2
+SAISG PHRVT TBSTT TT™Zˇ
+DUSES WRR0D GA3ET ETEME
+IKQD¸ DDANS NAX8P
+#H217
+SRIEW UEFEP YWERR ˇTTTS
+IˇZ7E BARTM STINC HINHS
+TTESC AOGSG IAIAU NKRBH
+TETRN QA™MX D8EFS ENS2D
+EˇKVS XJLS0 R2ITS
+#H218
+IDEIT NILHI QRESH EA¸5J
+N2VNR 7EYAQ ICEPI T5IHC
+ZMAFX SDPKX AUNS™ UTTMT
+ENIGA SIMBE A5CES WXHˇM
+NEDAA OIJTT NNXOE
+#H219
+DSE8S ID™ET ZVNTP AUSLZ
+WMTUT NQ™NE ERCUN IINIH
+TEEBW A9TSY CMUTA S¸SDI
+E™R5K SPISI FEEEK NIJI=
+AIDˇS A6OMS SCUXG
+#H220
+7INIL AUEN¸ E8ˇCI SDSFR
+NEIUE NTNQE SIAJV RKUIA
+OKYNS ER3QR S4UVW EISBS
+NJHXA TBFTE SDG¸E APHMI
+MES1T I™TRI MNTTZ
+#H221
+ARAEW NQTSI N9UZI AQN™N
+KˇP3U N™STˇ XDRTV TUA™T
+TUNKK =D6JM ELIRT OETME
+MNSAS WIAIO TAE8N EBACT
+YIIFG EEENE AUUHX
+#H222
+DAUMB MZ/NS VRINA PTAFI
+XSˇN1 RZLTQ EAHEE DWESK
+AWAGS HSSMZ TYTAY RT?ZN
+JC4DO UNTET HISII I™INI
+2EE™T EELAE KUTAˇ
+#H223
+LGIEZ ANIMR EVNNS NUD/Y
+A=LSE IBETA I4EDN PMˇNL
+CAISE GDUEJ OITEN ESLZE
+YXHST ˇNINA KWT0T HDSTI
+MIUCI RX4LF SHMQ™
+#H224
+TXJAN IVSˇA 1NDSD DRMIA
+DESRW TSID1 ES2ET BIREE
+MNSTP WEKNG TASNS 7LTZI
+INSRH OPIS0 FTZXT UCEEA
+AFYEG DDICQ UEKI™
+#H225
+DH™IK 7ESDH AEMPU T™IEB
+ITYHT TTMEO XSTEM EADNV
+NSNHE ITSNC N6LNF WA?TX
+QEˇJU SAMSG TEMNI E3UOˇ
+KNS0K RTTIO NSZCF
+#H226
+ESPRC TUT™I KTAUS ™EˇGN
+ANDAI IZJ3D TILUE PVBQH
+8UHEI EASSS INRII TNEIY
+™?ESZ M5FTU WAIEV EUBSR
+EOTSA PXFP7 SNRCA
+#H227
+T™UHN ETELE G=VˇR ZP0FS
+RASPS SUTIU 8NAMT GAZQA
+AENNI W3VIT YU2Mˇ TETIH
+TRVDN ZSNUS KEJXI TCBZD
+INSOI EEDEI NMENF
+#H228
+ˇEAOA EAAEI IMKT8 NNPTB
+XVDYF IDCWU IEJNT OSART
+EEUOA KSN3™ UEFDI FNTEU
+AAZEN L?HQN NCFEN INMYU
+™NII8 UFIGT TTMH6
+#H229
+EELIH ¸AEON KWLTC I4UTE
+NARAZ TFXET RˇJ6Y AEVES
+™NIDA NDIMA SES5N TSPTH
+WMIHS REHTT OIIˇH TYABX
+GEN?O KDA™U ?ISQA
+#H230
+LWFSL DHZHK ARQNP SVIIE
+Oˇ™JN TSHPD =IEU= UAEDA
+EDSED /II0A CEEIˇ TIIIM
+VE¸SY SEAAE ATGTA XIRMT
+LDICA 9NBSH SASTP
+#H231
+HIIIG GR2E= MB?AD HJHID
+WNZTI XCSˇS NPA™I WNNEN
+TIYEE FEOMK EATRS TXHAN
+LIFAJ DT4/A ETENS EASWE
+IQRVO ZUA™H CTHAT
+#H232
+ESEKP NBSIE TEUXT AJTFI
+NMZZN SDANE HA/UA YERM™
+ˇQIIA IE=NS CD2OF OTENT
+IHWVL NEUI6 RTNNI CRAE/
+KGMNP TQTAP IYRWR
+#H233
+DNJNR IPEIA N=BD™ EEVS8
+GIAAA VNTRL IUEKM RDTSX
+ISCAI CYEA0 TQDWA MˇWHT
+3SETF DTZBS STBXE NTEOL
+ANTET RZIA= D¸HME
+#H234
+BII7D S1FSW E0ˇAE TVI¸F
+KLENA MHADH AGIHN EAXMC
+SNDNY TKAMN NIIHO EMIAA
+IUSIE K1ENE ™DPJA QETUB
+UGAV0 ITSZE TRMTI
+#H235
+EEYKS HNXT¸ GNMNF REESE
+MAZD/ ITSTH ATRI= NU¸TW
+UIIBN ATASI NEGLL TIEI2
+SMHJW AQDTH VC™T= OAJSA
+EMEQE ANT9S ˇDPHM
+#H236
+EW¸IA AIPS™ UISHA EITMR
+ˇNSIS RJIZE ASRTI HQEAK
+¸1IST 5LTVE HANEU IEFNO
+™BENN ¸AMRI GLUDS EIF5I
+MEVNT YS=U? XRQCA
+#H237
+DI=VN E3RTO UIATI SIAEE
+6MˇIR A0HZP EE™LT NEZNQ
+UIACT ETAYD AH8IE MFTTO
+XSMWA BSHDS GJESD UAˇNR
+¸KALT WSVSS IGOET
+#H238
+YOIKS ZFOR6 IED5N HEIII
+IUTEX EIADN ITNTR UNTST
+ANETS RUTSM EGCIV Jˇ™KW
+AE2EL HUSS9 BTXQA N?QAH
+VPEDN SCXEJ DN™NN
+#H239
+HABOH JSSPU ˇNMIQ ISRET
+A2K™S IEFIE FMHTE NNIAJ
+HIIGY 6STVI X94ID NNHTA
+S¸WRO EEHSN EU?NZ IKECL
+EBQXN TSTSM ESRWI
+#H240
+3NDEW ATAEO QUTPV BIHAN
+?EDNT EWNS8 DNE™G IDKMU
+EICSI VRˇTH NIRCH TE™SE
+¸HNIJ GEDYX IQTNS MSRN=
+LINFT RTZ7E ATˇAA
+#H241
+PNLˇI RUMA3 INGIN EMNSN
+EAAMD TKECM ZRC?T SNSJI
+0IVAO UGKˇA OTTZ™ IHIRN
+ATWWH IIAA? TSEEX MFEEY
+RRIIO /ESQV AEEBM
+#H242
+EKSCI ZB?TY RSTST XIEAE
+UOTUM HLITB ES¸3S HWSON
+AIDAN SNEJJ ILEIS TIU4V
+ˇHDT1 AFGRM REAAI WMS™P
+CIGIE 3NESN YQSRE
+#H243
+HOM™A EIZSB PENE™ OETIA
+TWEMA BWTEJ QNUNR KSIIA
+2ORTE ˇRSZE TANNT 5JZNX
+TV4PN I=UCF GTSLH ESDIU
+TRIUO NNUN2 ERSTY
+#H244
+UHXGI T™ATˇ AJ5GL T?1EI
+RXPTN NTHJS PIRSD SSNQN
+EZDAC NEWEH IIDAD IBZQE
+EVRNI RYTDA ˇEOTT SIKEN
+GNFMN INE7S EM1SL
+#H245
+GN21C YIMWS NATRU BDˇNG
+VTWAE TRUGP JK=FR LE™IA
+JAˇIH AASII ERS3E AMˇXA
+TANTU TMISE TE™TT EQMSN
+SIEEO APZTE 3UDˇA
+#H246
+NKIEN YPEPI GTTRT XDTNR
+ˇIED5 PS3EH ISMRE VTUJJ
+AHABA ATASI LVCWN MFMAU
+OEIBE DES™R YRTQ0 LSIIN
+OAESN 5HE9A OSAIZ
+#H247
+EINA3 TKDHZ ™FTMD QYXBT
+LSEBA ™IDSE LPNGN RESIP
+JSIMF A3AOH W3RSN MAID3
+WAVSS EATJE 7INFI FMIEA
+ITTCE EEDˇO UNVUT
+#H248
+™=HME TYYMA ?ITAD ?MPDT
+JQATE EHNH8 TMSDN EIEIS
+NACIE LˇERI SY3FS GVSNT
+PKRAV BATAT ENIGZ IXOGE
+UDTFF SFSCT NAUWE
+#H249
+EDSAE INR=™ IWRA5 EEEST
+CEGIJ C?AJH MSQHO LBP1Z
+ITUUE PTTSA INEE9 RHSHN
+WASNˇ OOAYS VQMUN TINHR
+IFIXE NTWIS TWKST
+#H250
+XT¸JD KSSAG 8SHIS ECOTS
+SHMTI MU™ZE ITTY2 VARET
+K™EHA HS3NI /ATAC BRMTE
+FATSN WNIXM ˇAYEN ETIQF
+MENTP EELUD NUL=D
+#H251
+TBGRL TTZYI KHR8ˇ VAUID
+SQA=R NATNH CIJRK RFNIA
+BISAE EˇUIA ES9TP ESEEH
+INOIE WSXND 3ATE™ MYE7E
+STU™I NISCA MˇGNZ
+#H252
+CNS2N EJSLS EUNFA IDSI1
+OIESL NRIIM TDI¸L RT7ME
+ETMMT ABSXW NˇHQP TABII
+T™EYS SEA9T LNSIH AU3HE
+QKMEG JTEMN SZGDV
+#H253
+TEWTF VSDLI ˇYIME KQAMS
+RYZSS SGET1 XARKI DMB9E
+SQPAW TE6UR MCSTE NTTES
+SIOED ™TMMH AN7TD IFSEA
+XWEAA NJLAI ST1TC
+#H254
+RQHSS PEVTA 3COL9 WMZUT
+TSSS8 AZERT 0AETN UTSGF
+™DTDS ISIFN BEKKJ ˇITEU
+MSTRY UETFJ ANEIA IAS/N
+HRETP ESIXM OUAEO
+#H255
+IALIX ASˇIV ETAF™ EXA6N
+NNCEF JTETU SABUT IIPSM
+SSGUR EVITA TYDES DANTR
+INRTˇ UMUˇA ™HSNH OETEU
+KEV11 ZIEUO Q7WN0
+#H256
+THUE™ SIEEA D/ROD BITNT
+IEVEˇ PNJST QFSLI UE/EM
+MSTAX SDTPN IEATC TMDSW
+NNHZE KNA?Q ATGB™ YS9YA
+INIA6 FISME RLCRZ
+#H257
+MUSEH TN6AE I7TDU HQMEH
+KISGU TWI8E ¸RBDN ASLIN
+?SETE ¸HNTI AE1UA NIJNK
+JNSSR AWVNN ETFEM J™XET
+ASZCT POIˇL MYMII
+#H258
+DUGAA RNUUP NˇHAE ™TCEM
+XEEIT DTIPE IAFTI LAVTˇ
+AUWIN EYOSS NJBR6 RSQRE
+WIAQS SA/=9 KAUIN ESJIH
+LDLII ™ZEP5 EAWNI
+#H259
+PISD6 VFINE L/E8G REALS
+RGIAR UIAXJ =AITE IHCEE
+IKSSB 0ISWN MCUNR AUAER
+ZOTVS XNAMD ¸DHQT TITAM
+EIEˇT OGTEA SZYN™
+#H260
+NWAC™ TZGVP /IA1T TIXIA
+TAVES SFSET ESNH1 JDBHS
+XNEOP IHKUR EIˇDU DQDTM
+ASEHF TIINQ E6MH2 QNSSE
+MTELS ASENW WˇYII
+#H261
+TNQ0S GNRSB HFY1E T=GUI
+SDRTG LJSEE ASBIA ZIDTP
+FEENK TNITT TBDER ™ˇOHM
+HAHSA 1SCEN 0ZTME ANTGA
+EPMTA RWDEV NAXTT
+#H262
+NLRCE GTEQT T5?BD SEWL7
+OTAPA M/NES ADGKU ETAAS
+ZTTAM ASDAA FTT™M VYIT2
+EHXEN MABEN JEKZˇ ICDIT
+¸HAEK MTSTA T™JMR
+#H263
+CDIVT IWYMW NTFZU BR™ET
+S1ENM TETRE /6AAN NHSLP
+STGDA EFHTJ QDIYI XYIIU
+EUGUE EIATA SENCZ ™HKIN
+ONESA NN4DA Aˇ™I8
+#H264
+BMTNE VTUQ8 LQCYI XCESU
+NMVEN ITA/A XGIAA EIFNA
+IRAEJ UPN4G TTAE™ ARESA
+SZT9I ODKET TWHˇE TIMNI
+HHAED N1RAY KROGA
+#H265
+JEKSS ESTIN MQTRH IYTIˇ
+5EB5I NYFE™ MEEAI IN/TM
+NWIIN 8SSRT ROE™ˇ AˇUCN
+BPOIX ˇNMIU HDGN4 TLRDN
+NTEAV SJZDC NEEYS
+#H266
+QTBAM RSNCE HMS™V KTASE
+A¸NCX TMHEA NISDU EA0LZ
+OEENP EETTP ISFSX TI/MR
+SIIY5 ETWIJ EXVSF 8IIGM
+NISU3 USMTN ˇUMBˇ
+#H267
+ˇEIAE OEAUW PFINN OETWN
+8G™CA MJHTM AJNIY RNJXT
+TEIˇB J7EDV NTIEN NZEAP
+THTLS INREQ VN1KS D5DSS
+ˇRDTS ITTHN ENRM3
+#H268
+LTHAO XSHS= DX1PN HLRDI
+GENET FNAQ™ IINB™ SVS8S
+WSYCZ TETMS NFIUS ™JUGT
+AAUTˇ CSRTT KEIEV UE8EH
+XEITS RRISE SIE3N
+#H269
+IIMHM I3GLM ZTHT5 KˇEAI
+XNUNH ™ITAT NEQNA BˇETN
+JNOMN ESADR NP8XS RIIHL
+HWˇZA EGECW AHTTD IFVN0
+NSAI¸ ETUEE ESAY0
+#H270
+™IRRU TVSNN NTSZL ¸AIGE
+MJDHI NOYQN BEBDN PSHAL
+TNEAD KSEUN Yˇ3WG ETIUE
+U1FDS ATSNI ISCW™ 1SXTU
+AEETO M5?IT ETIGE
+#H271
+UYA/F PNXMT SDORB SREVA
+SW™WT COQSK KTRML IRI4X
+STˇEJ SSNAT TICTD TESEH
+MS™ˇE U/MIZ ESSEN HTMAS
+0GSˇT S8TEH TKETE
+#H272
+A/YT2 5US™D RPQZU TN1NT
+GEXMN OFIAC GEEPO 0TDEI
+AZTTT DRSAB KTTNS EAMAA
+GATSE JDEER ANAAL SDWEU
+UIIET HQCˇN RV™IT
+#H273
+HPATE NMCRT TEOEQ UANTV
+AEVTE ML4AR NII7Z NINSD
+AˇESI IESRF HLEIE CMQ5I
+TA™KN DJNIN YUIMN W7O™X
+GHM9I SLSNB QEFON
+#H274
+NHNHU FHEIK XORIA A9AI0
+9EMAT ETEIM HEKAA WCDTD
+RHPAB QE¸GE JDUIN ISSTE
+SAITA HD?TG ELHTS AATAA
+HRN™¸ YVˇIE M1ZAI
+#H275
+ENEIK JPASS QUFNT KI8DS
+ET=AT IILMH YIESR S2ZDA
+TEXEI AIONN AIHBM N9RTB
+TSNEW QXCET KGVD™ AZYUN
+URTEE ANADI ˇ4XDX
+#H276
+OITEX W4DQL RJTEE AYZAS
+MCTEI TNNAM N9I™H EGTAI
+ˇGFYA HSJRN SUU6O EGPSN
+ES9TS GVYAB EDMKT INHNR
+ENˇTA IITSD QET6D
+#H277
+WBJNE DHMII KESIR BT1DN
+ELART SSAZF YEVSE IICNN
+LNTNA IVXEI IDSTˇ E1AMH
+QVSAN E?™OS STEUT ?VSYP
+HISFQ IGMI5 ¸DDEM
+#H278
+TWMK9 NIVT™ EEXRN CBRUK
+EQISD ˇMIQ5 AAJNA FAPTN
+STITY JTEMU OEEIP ˇE?SR
+AM?IO HNUTH QLETA NENDS
+IHSEN CSATG 6IFZA
+#H279
+ERIRS IITSL UUSIH X4KI0
+AAEQˇ GNRWY PISME N™IEE
+TMVYS DIˇET CNSTN SHˇEZ
+O5BIE A/A¸A TDLNO AUTDM
+M3AJS ALCPF TREEI
+#H280
+ALMQO TDOLI TEˇBS ENSAT
+CNT=I UWQ8S SIXDD TEIAF
+EAAM™ PSHYQ MTPVE EKMSE
+HZTTN JE4AB RSHIU SGEIG
+TNUNA =9OT™ ETADS
+#H281
+KAAAA HESYG NNTHY XSSUS
+UET9J ™SVIT TCROI SUIY2
+LTVLQ TDISF VR¸WI ITTPT
+AFU?I RSADR NEESE /EBUˇ
+ENWNE SERG/ AMEZT
+#H282
+ˇOHMA SIGNI EHSST ZTLWU
+4NMTN EMGOF NTU/O TSYWA
+RALSH IUIIB SEBUM KIIE=
+NOEHX NHI™A EI7IX CPENE
+DVHSS QEKJI CES0N
+#H283
+TINFQ RTHEU SEAIE FITML
+R8DLS SPGKE ITTSA EEASF
+SIEAY DS0TI NˇJDC PSMNA
+B™XED MAAIZ NTIZ2 AVZSP
+EEWNO R1BII RMHU2
+#H284
+NSˇ2U ESIDM HPJ=A LIMKI
+HSANI AGRSK ILNTZ TCXIE
+RY=IT EWNVE OINOE NHMLE
+XBQ™E SN0IH NILFI L¸ITR
+EAATE U8BRN RUNES
+#H285
+FARLI SES™6 ITNKQ CSTUY
+S6WEI ™TVII IED2N JSAGW
+MQNSX EPNIQ HNVSA SSCEO
+HE9ˇN ˇMIWU DTTRS IHAEH
+AZADM IM8TE ECTEB
+#H286
+ZU9Q9 EITET EGDSF AG6AM
+SˇSBO E9CAD REJDF TISSN
+EMDIA OTIIS NNN3Q QYLKN
+RTEˇH FARIP ITGTR VGENE
+HTNSW NXEIT ™NHNR
+#H287
+ANEEI ZQUHI HA7JA YNIUU
+UNIBT DT2MS FS5CA ATNNX
+EMRQJ SˇXEI EDUPT S8UHS
+IOXTW ELGNI ESAII KVAˇI
+T™EI1 EZSLH APNEV
+#H288
+IGUGM ETTNE 8PXAK HDRIE
+CTDAI ONNNS SIAWS AE?YP
+EIEEB ATWIV ˇA5IN MEIYZ
+SRHPI MMHEA TXNLH 8T™IA
+1ESRA AQJSJ VHOFT
+#H289
+LSLH5 DSBYD IP™RW TA™AX
+EGI1I 7DQUZ IUBTY ENBUT
+ESIJE ANTTN AEU1E TNINU
+E¸IGS MCIVN OIˇHN 1NSNI
+FAGAV EENDD MKAEI
+#H290
+IBLTR WESSN AHTEU XESAZ
+WN6IN RHSV/ IJTMI UJDEE
+™TTNI THUˇN AEUOE UTCAC
+TQAEI I?NˇS I2FˇS KSFTN
+AYEGV PEH¸J GDA5M
+#H291
+AˇZGY =™BNA MNDTA PPEAR
+MSLDF ET?TC UOI4Q ANSGE
+IENXI AETTA 8IIHR BTDWJ
+EUTEN UPPGN SSNJE KEUWN
+TVZEY UNI/T IHDAT
+#H292
+MP25E STITU TAEAB MVEM0
+IIAUI CKXAP OSYSG UT¸NI
+SMIQS NZLMD ONENB IE3EP
+TENSF NJWNˇ IHDZK GETES
+MHAR0 ISTU™ NINDE
+#H293
+JBUTˇ SNHWI IENHT EUIE/
+AINEI N2SLN RROTW EPZNL
+MRDAE DOCEK ˇDZN/ TSAS™
+MEUF8 GXSET TSJHY TTKII
+IZ™QN AAVTP 5ENHN
+#H294
+ITWEI E5HCK EVSPI EDIEO
+NEPNU TNˇAˇ WSIAA NBRFX
+HX1AA LNMUE EN=0Y HTDJU
+DNASS GHMMI ™IRZE IIIIQ
+OTAWE BNNSA GYUT3
+#H295
+IFIET WS™SS PRTXN 22SDN
+MLˇIE YSEOE EZAEI WSBMJ
+MU0MV IIQ5N CH¸ZO NNAKM
+ISUOA SSLIA ENHPR UTIAE
+RIEUE ITCGI 4SRTL
+#H296
+EEUIA WSMAK HNEDT E=CRV
+EGXNS RRAAS CSOUS YIEZM
+HLNQ2 TNVIA OT5EF ˇI™DE
+JSNˇN IHBQD TIZ0O TOFET
+IPSIM ARIEA 7IDAT
+#H297
+AWGEU RETNI PITWA JCTBA
+I¸ˇTY NIMDT UXSRN UTDNE
+H™NZN IPEDQ YVJSS ATENX
+HFDFE HAEEN AT5AO MISNK
+E?T6V IZTEL AP24U
+#H298
+SFEMI WOINA MUJAˇ GS20T
+AIXEˇ TQMPH CEMIA AMSII
+2NAEI VISEC KAN7T IAI8Y
+ASRUE LZGRE OVBEM ™TKUI
+KNHRD IXTEE NNLDS
+#H299
+DI9L? TONEH HTAI5 IEQSN
+VEEJM ZLEEI ITARS WCFS2
+NQZHE EXGPC GARUT DYTTS
+TAFHI NBIAU IˇCUA NSADS
+™KEN2 INEC™ THNMA
+#H300
+NIATU IIZDH KAMSN 2UUEX
+M™QOO DAVKF //QNH EITHP
+IXCIA KJTNS FRETE EWEGI
+IBISF TETNN AW?NN UYDEA
+LRLTD NNEAˇ IYS2E
+ų% \ No newline at end of file
diff --git a/tutorials/sndkit/morse/charlist.h b/tutorials/sndkit/morse/charlist.h
new file mode 100644
index 0000000..053aaae
--- /dev/null
+++ b/tutorials/sndkit/morse/charlist.h
@@ -0,0 +1,96 @@
+#ifndef CHARLIST_H
+#define CHARLIST_H
+
+#define INT_LETTERS 1
+
+static const char Chars[] =
+#ifdef INT_LETTERS
+ "abcdefghijklmnopqrstuvwxyz0123456789?.,:åäöü£)/=";
+#else
+ "abcdefghijklmnopqrstuvwxyz0123456789?.,:)/=";
+#endif
+
+static const char *Codes[] =
+ { ".-", "-...", "-.-.", "-..", ".", "..-.", "--.",
+ "....", "..", ".---", "-.-", ".-..", "--", "-.", "---",
+ ".--.", "--.-", ".-.", "...", "-", "..-", "...-",
+ ".--", "-..-", "-.--", "--..", /* A..Z */
+
+ "-----", ".----", "..---", "...--", "....-",
+ ".....", "-....", "--...", "---..", "----.", /* 0..9 */
+
+ "..--..", ".-.-.-", "--..--", "---...", /* ?|.,: */
+
+#ifdef INT_LETTERS
+ ".--.-", ".-.-", "---.", "..--", /* International letters */
+#endif
+ "........", /* Error */
+ "-.--.-", /* () */
+ "-..-.", /* / */
+ "-...-" /* = */
+};
+
+static int
+parse_charlist (char *ch)
+{
+ int prev = 0, i, j;
+
+ if (strcmp (ch, "-1") == 0)
+ return parse_charlist ("aeost");
+ if (strcmp (ch, "-2") == 0)
+ return parse_charlist ("hilnr");
+ if (strcmp (ch, "-3") == 0)
+ return parse_charlist ("cfgu");
+ if (strcmp (ch, "-4") == 0)
+ return parse_charlist ("dkmp");
+ if (strcmp (ch, "-5") == 0)
+ return parse_charlist ("bqvy");
+ if (strcmp (ch, "-6") == 0)
+ return parse_charlist ("jvxz");
+#ifdef INT_LETTERS
+ if (strcmp (ch, "-7") == 0)
+ return parse_charlist ("äöå");
+#endif
+ if (strcmp (ch, "-8") == 0)
+ return parse_charlist ("50146");
+ if (strcmp (ch, "-9") == 0)
+ return parse_charlist ("27389");
+ if (strcmp (ch, "-10") == 0)
+ return parse_charlist ("/=?");
+ if (strcmp (ch, "-11") == 0)
+ return parse_charlist (").,-");
+#ifdef INT_LETTERS
+ if (strcmp (ch, "-a") == 0) /* Finnish CWH module */
+ return parse_charlist ("a-zåäö0-9/=?");
+ if (strcmp (ch, "-d") == 0) /* Some very difficult characters */
+ return parse_charlist ("1j/l4bh569ö");
+#endif
+
+ for (i = 0; i < strlen (ch); i++)
+ if (ch[i] == '-')
+ {
+ prev = -prev;
+ }
+ else
+ {
+ if (prev > 0)
+ {
+ for (j = prev; j <= ch[i]; j++)
+ {
+ randomlist[nrandom++] = j;
+ randomlist[nrandom] = 0;
+ }
+ }
+ else
+ {
+ randomlist[nrandom++] = ch[i];
+ randomlist[nrandom] = 0;
+ }
+
+ prev = -((unsigned char) ch[i] + 1);
+ }
+
+ return 0;
+}
+
+#endif
diff --git a/tutorials/sndkit/morse/loadcw.c b/tutorials/sndkit/morse/loadcw.c
new file mode 100644
index 0000000..d628a44
--- /dev/null
+++ b/tutorials/sndkit/morse/loadcw.c
@@ -0,0 +1,163 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+
+#define TESTFILE "Vvcw"
+
+static int ngroups = 0;
+
+static void
+printchar (unsigned char c)
+{
+ switch (c)
+ {
+ case ' ':
+ ngroups++;
+ if (ngroups && !(ngroups % 6))
+ printf (" \n");
+ else
+ printf (" ");
+ break;
+
+ case 0x99:
+ printf ("ö");
+ break;
+ case 0x8e:
+ printf ("ä");
+ break;
+ case 0x8f:
+ printf ("å");
+ break;
+ default:
+ if (c <= 'Z' && c >= 'A')
+ c = c + 32;
+ printf ("%c", c);
+ }
+}
+
+static int
+showtest (char *tname)
+{
+ FILE *f;
+ unsigned char line[1024], *p;
+ int on = 0;
+
+ if ((f = fopen (TESTFILE, "r")) == NULL)
+ {
+ perror (TESTFILE);
+ return -1;
+ }
+
+ while (fgets (line, sizeof (line), f))
+ {
+ p = &line[strlen (line) - 1];
+ while (p > line)
+ {
+ if (*p == '\n' || *p == '\r')
+ *p = 0;
+ p--;
+ }
+
+ if (*line == '#')
+ {
+ if (on)
+ {
+ fclose (f);
+ printf ("\n");
+ return 0;
+ }
+
+ if (strcmp (line + 1, tname) == 0)
+ on = 1;
+ }
+ else if (on)
+ {
+ p = line;
+
+ while (*p)
+ {
+ switch (*p)
+ {
+ default:
+ printchar (*p);
+ }
+ p++;
+ }
+ }
+
+ }
+ fclose (f);
+
+ return 1;
+}
+
+static char *
+randomtest (void)
+{
+ FILE *f;
+ unsigned char line[1024], *p;
+ static char name[10] = "????";
+ int n = 0, x;
+ char *tests[1000];
+
+ if ((f = fopen (TESTFILE, "r")) == NULL)
+ {
+ perror (TESTFILE);
+ return NULL;
+ }
+
+ while (fgets (line, sizeof (line), f))
+ {
+ if (strlen (line) < 1)
+ continue;
+ p = &line[strlen (line) - 1];
+ while (p > line)
+ {
+ if (*p == '\n' || *p == '\r')
+ *p = 0;
+ p--;
+ }
+ if (strlen (line) < 1)
+ continue;
+
+ if (*line == '#')
+ {
+ char *tmp;
+ tmp = malloc (strlen (line + 1) + 1);
+ strcpy (tmp, line + 1);
+
+ if (n >= 1000)
+ {
+ fprintf (stderr, "Too many test texts\n");
+ exit (-1);
+ }
+
+ tests[n++] = tmp;
+ }
+ }
+ fclose (f);
+
+ srandom (time (0));
+
+ x = random () % n; /* Select one of the tests randomly */
+ strcpy (name, tests[x]);
+
+ return name;
+}
+
+int
+main (int argc, char *argv[])
+{
+ char *thistest;
+
+ if (argc > 1)
+ exit (showtest (argv[1]));
+
+ thistest = randomtest ();
+ if (thistest == NULL)
+ exit (-1);
+ fprintf (stderr, "Selected test text is '%s'\n", thistest);
+ fflush (stderr);
+ exit (showtest (thistest));
+}
diff --git a/tutorials/sndkit/morse/morse.c b/tutorials/sndkit/morse/morse.c
new file mode 100644
index 0000000..6077873
--- /dev/null
+++ b/tutorials/sndkit/morse/morse.c
@@ -0,0 +1,316 @@
+/*
+ * Purpose: Simple audio programming example that plays morse code.
+ * Copyright (C) 4Front Technologies, 2002-2004. Released under GPLv2/CDDL.
+ *
+ * Description:
+ * This program reads stdin and plays the input to an audio device using morse
+ * code. The stdin input is supposed to be originated from a file. This
+ * program is not capable to play live keyboard input.
+ *
+ * This is a great OSS programming example because it shows how simple
+ * audio programming can be with OSS.
+ *
+ * You can use this program as a template. Just replace the
+ * while loop of the main routine by your own code.
+ *
+ * The {!nlink morse2.c} and {!nlink morse3.c} programs are more complex
+ * versions of the same program. They demonstrate how the {!nlink select}
+ * system call can be used for serving the audio device in parallel
+ * while handling terminal input.
+ *
+ * This program was tuned to be used when practising for the
+ * finnish morse code test for radio amateurs. It supports the
+ * scandinavian version of the morse code alphabet used in this test.
+ */
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+#include <fcntl.h>
+#include <sys/soundcard.h>
+#include <math.h>
+#include <signal.h>
+#include <sys/time.h>
+#include <sys/types.h>
+
+#define BUFSZ (16*1024)
+#define SRATE 48000
+#define ATTACK 100
+#define CHARDELAY 3
+
+int charspeed = 25;
+
+int dotsize, charsize;
+int audiofd = -1;
+
+char randomlist[256];
+int nrandom;
+
+static int ncodes;
+
+double a, step;
+
+/*
+ * The genpulse() routine converts generates a single dot, dash or
+ * a pause between the symbols. this is done by generating sine wave
+ * (using cos()). It's pretty slow but works for us.
+ */
+#include "charlist.h"
+
+static int
+genpulse (short *buf, int w, int state)
+{
+ int i, l;
+ a = 0.0;
+
+ l = w * dotsize;
+
+ for (i = 0; i < ATTACK; i++)
+ {
+ double tmp = 0x7fff * cos (a * M_PI / 180.0);
+ tmp *= (double) (i) / (double) ATTACK;
+
+ *buf++ = (int) tmp *state;
+
+ a += step;
+ if (a > 360.0)
+ a -= 360.0;
+ }
+
+ for (i = ATTACK; i < l - ATTACK; i++)
+ {
+ double tmp = 0x7fff * cos (a * M_PI / 180.0);
+
+ *buf++ = (int) tmp *state;
+
+ a += step;
+ if (a > 360.0)
+ a -= 360.0;
+ }
+
+ for (i = l - ATTACK; i < l; i++)
+ {
+ double tmp = 0x7fff * cos (a * M_PI / 180.0);
+
+ tmp *= (double) (l - i) / (double) ATTACK;
+
+ *buf++ = (int) tmp *state;
+
+ a += step;
+ if (a > 360.0)
+ a -= 360.0;
+ }
+
+ return l;
+}
+
+/*
+ * The genmorse() routine converts an ASCII character to the
+ * equivivalent audio morse code signal.
+ */
+static int
+genmorse (short *buf, char c)
+{
+ int l = 0, i;
+ const char *s;
+
+ //printf("%c", c);
+ //fflush(stdout);
+
+ if (c == ' ')
+ return genpulse (buf, 4, 0);
+
+ for (i = 0; i < ncodes; i++)
+ if (Chars[i] == c)
+ {
+ s = Codes[i];
+
+ while (*s)
+ {
+ if (*s++ == '.')
+ l += genpulse (&buf[l], 1, 1);
+ else
+ l += genpulse (&buf[l], 3, 1);
+
+ l += genpulse (&buf[l], 1, 0);
+ }
+
+ l += genpulse (&buf[l], CHARDELAY, 0);
+ return l;
+ }
+
+ return 0;
+}
+
+/*
+ * The playchar() routine handles some special characters that are not
+ * included in the international morse aplhabet. Characters are then played by
+ * calling the genmorse() routine.
+ */
+
+static void
+playchar (char c)
+{
+ short buf[16 * BUFSZ];
+ int l;
+
+ l = 0;
+
+ if (c <= 'Z' && c >= 'A')
+ c += 32;
+
+ switch (c)
+ {
+ case '\n':
+ return;
+ break;
+ case ' ':
+ case '\t':
+ l = genmorse (buf, ' ');
+ break;
+
+ case '\r':
+ break;
+
+ case 'Å':
+ l = genmorse (buf, 'å');
+ break;
+ case 'Ä':
+ l = genmorse (buf, 'ä');
+ break;
+ case 'Ö':
+ l = genmorse (buf, 'ö');
+ break;
+ case 'Ü':
+ l = genmorse (buf, 'ü');
+ break;
+
+ default:
+ l = genmorse (buf, c);
+ }
+
+ write (audiofd, buf, 2 * l);
+ if (2 * l < charsize)
+ {
+ char tmp[4 * 1024 * 1024];
+ l = charsize - 2 * l;
+ memset (tmp, 0, l);
+ write (audiofd, tmp, l);
+ }
+}
+
+int
+main (int argc, char *argv[])
+{
+ char *devname = "/dev/dsp";
+ short buf[16 * BUFSZ];
+ char line[1024];
+ int i, parm;
+ int l, speed, charspeed, wpm = 8;
+
+/*
+ * Charcter rate (CPS/WPS) handling.
+ */
+
+ if (argc > 1)
+ {
+ wpm = atoi (argv[1]);
+ if (wpm == 0)
+ wpm = 12;
+ }
+
+ if (argc > 2)
+ charspeed = atoi (argv[2]);
+
+ speed = wpm;
+ charsize = 60 * SRATE * 2 / charspeed;
+
+ printf ("Words per minute %d. Characters per minute %d\n", wpm, wpm * 5);
+ printf ("Charrate %d chars/min -> (%d samples)\n", charspeed, charsize);
+ dotsize = SRATE / speed;
+
+ ncodes = strlen (Chars);
+
+/*
+ * Open the audio device and set up the parameters.
+ */
+
+ if ((audiofd = open (devname, O_WRONLY, 0)) == -1)
+ {
+ perror (devname);
+ exit (-1);
+ }
+
+ parm = AFMT_S16_LE;
+ if (ioctl (audiofd, SNDCTL_DSP_SETFMT, &parm) == -1)
+ {
+ perror ("SETFMT");
+ close (audiofd);
+ exit (-1);
+ }
+
+ if (parm != AFMT_S16_LE)
+ {
+ printf
+ ("Error: 32/24 bit sample format is not supported by the device\n");
+ printf ("%08x/%08x\n", parm, AFMT_S16_LE);
+ close (audiofd);
+ exit (-1);
+ }
+
+ parm = SRATE;
+ if (ioctl (audiofd, SNDCTL_DSP_SPEED, &parm) == -1)
+ {
+ perror ("SPEED");
+ close (audiofd);
+ exit (-1);
+ }
+
+ if (parm != SRATE)
+ {
+ printf
+ ("Error: %d Hz sampling rate is not supported by the device (%d)\n",
+ SRATE, parm);
+ close (audiofd);
+ exit (-1);
+ }
+
+/*
+ * The setup phase is complete. After this moment we can forget that we are
+ * working on a device. The remainder of this program behaves just like
+ * it's writing to any (disk) file.
+ */
+ a = 0.0;
+
+ step = 360.0 * 600.0 / parm;
+
+ l = 0;
+ l += genpulse (&buf[l], 1, 0);
+ write (audiofd, buf, l * 2);
+
+ /* Some initial delay */
+ memset (buf, 0, 4096);
+ for (l = 0; l < 30; l++)
+ write (audiofd, buf, 4096);
+
+ while (fgets (line, sizeof (line), stdin) != NULL)
+ {
+
+ if (*line == '#')
+ continue;
+
+ for (i = 0; i < strlen (line); i++)
+ {
+ playchar (line[i]);
+ }
+ }
+
+ /* Some final delay */
+ memset (buf, 0, 4096);
+ for (l = 0; l < 20; l++)
+ write (audiofd, buf, 4096);
+
+ close (audiofd);
+
+ exit (0);
+}
diff --git a/tutorials/sndkit/morse/morse2.c b/tutorials/sndkit/morse/morse2.c
new file mode 100644
index 0000000..63e5453
--- /dev/null
+++ b/tutorials/sndkit/morse/morse2.c
@@ -0,0 +1,578 @@
+/*
+ * Purpose: Another morse code program that uses select
+ * Copyright (C) 4Front Technologies, 2002-2004. Released under GPLv2/CDDL.
+ *
+ * Description:
+ * This program is a significantly more complicated version of
+ * {!nlink morse.c}. It uses the {!nlink select} system call to be able to
+ * handle keyboard input and audio output at the same time. It shows how
+ * to prevent output underruns by writing silent samples to the audio device
+ * when there is no "payload" signal to play.
+ *
+ * What the program does is playing randomly selected morse symbols
+ * (based on the command line options). It then waits until the
+ * users hits a key. If the input character matches the morse output then
+ * the program continues by playing another morse character. If there was an
+ * error then the next character is repeated. The Esc key is used to stop
+ * the program.
+ *
+ * Parts on this program are common with {!nlink morse.c} and commented only
+ * there.
+ *
+ * The {!nlink morse3.c} program is a slightly different version of this one.
+ */
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+#include <fcntl.h>
+#include <sys/soundcard.h>
+#include <math.h>
+#include <termios.h>
+#include <signal.h>
+#include <sys/time.h>
+#include <sys/types.h>
+
+#define BUFSZ (16*1024)
+#define SRATE 48000
+#define ATTACK 100
+#define CHARDELAY 3
+
+char randomlist[65536];
+int nrandom = 0;
+int done = 0;
+int chars_to_play = 100;
+
+int dotsize;
+int audiofd = -1;
+static int ncodes;
+static int playc;
+static int terminal_fd = 0;
+static struct termios ti, saved_ti;
+static int totalchars = 0, totalerrors = 0, errors = 0;
+static time_t t0;
+
+double a, step;
+#include "charlist.h"
+
+static void
+terminate (int sig)
+{
+ time_t t;
+
+ t = time (0) - t0;
+
+ if (terminal_fd == -1)
+ return;
+
+ if (tcsetattr (terminal_fd, TCSAFLUSH, &saved_ti) == -1)
+ {
+ perror ("tcgetattr");
+ exit (-1);
+ }
+
+ printf ("\n\nTotal characters: %d\n", totalchars);
+ printf ("Errors: %d\n", totalerrors);
+ printf ("Elapsed time: %d seconds\n", t);
+ if (errors == 0) totalchars--;
+ if (totalchars <= totalerrors) totalchars = 0;
+ else
+ {
+ totalchars -= totalerrors;
+ totalchars += totalchars / 5;
+ }
+
+ printf ("Characters per minute: %g\n",
+ t > 0?(float) totalchars / (float) t * 60.0:0);
+ exit (sig);
+}
+
+static int
+genpulse (short *buf, int w, int state)
+{
+ int i, l;
+ a = 0.0;
+
+ l = w * dotsize;
+
+ for (i = 0; i < ATTACK; i++)
+ {
+ double tmp = 0x7fff * cos (a * M_PI / 180.0);
+ tmp *= (double) (i) / (double) ATTACK;
+
+ *buf++ = (int) tmp *state;
+
+ a += step;
+ if (a > 360.0)
+ a -= 360.0;
+ }
+
+ for (i = ATTACK; i < l - ATTACK; i++)
+ {
+ double tmp = 0x7fff * cos (a * M_PI / 180.0);
+
+ *buf++ = (int) tmp *state;
+
+ a += step;
+ if (a > 360.0)
+ a -= 360.0;
+ }
+
+ for (i = l - ATTACK; i < l; i++)
+ {
+ double tmp = 0x7fff * cos (a * M_PI / 180.0);
+
+ tmp *= (double) (l - i) / (double) ATTACK;
+
+ *buf++ = (int) tmp *state;
+
+ a += step;
+ if (a > 360.0)
+ a -= 360.0;
+ }
+
+ return l;
+}
+
+static void
+playerror (void)
+{
+ short buffer[65536], *buf = buffer;
+ int i, l;
+ a = 0.0;
+
+ l = dotsize;
+
+ for (i = 0; i < ATTACK; i++)
+ {
+ double tmp = 0x7fff * cos (a * M_PI / 180.0);
+ tmp *= (double) (i) / (double) ATTACK;
+
+ *buf++ = (int) tmp;
+
+ a += step * 2.0;
+ if (a > 360.0)
+ a -= 360.0;
+ }
+
+ for (i = ATTACK; i < l - ATTACK; i++)
+ {
+ double tmp = 0x7fff * cos (a * M_PI / 180.0);
+
+ *buf++ = (int) tmp;
+
+ a += step * 2.0;
+ if (a > 360.0)
+ a -= 360.0;
+ }
+
+ for (i = l - ATTACK; i < l; i++)
+ {
+ double tmp = 0x7fff * cos (a * M_PI / 180.0);
+
+ tmp *= (double) (l - i) / (double) ATTACK;
+
+ *buf++ = (int) tmp;
+
+ a += step * 2.0;
+ if (a > 360.0)
+ a -= 360.0;
+ }
+
+ write (audiofd, buffer, 2 * l);
+}
+
+static int
+genmorse (short *buf, char c)
+{
+ int l = 0, i;
+ const char *s;
+
+ if (c == ' ')
+ return genpulse (buf, 4, 0);
+
+ for (i = 0; i < ncodes; i++)
+ if (Chars[i] == c)
+ {
+ s = Codes[i];
+
+ while (*s)
+ {
+ if (*s++ == '.')
+ l += genpulse (&buf[l], 1, 1);
+ else
+ l += genpulse (&buf[l], 3, 1);
+
+ l += genpulse (&buf[l], 1, 0);
+ }
+
+ l += genpulse (&buf[l], CHARDELAY, 0);
+ return l;
+ }
+
+ printf ("<?>");
+ fflush (stdout);
+ return 0;
+}
+
+static void
+playchar (char c)
+{
+ short buf[16 * BUFSZ];
+ int l;
+
+ l = 0;
+
+ if (c <= 'Z' && c >= 'A')
+ c += 32;
+
+ switch (c)
+ {
+ case ' ':
+ case '\n':
+ case '\t':
+ l = genmorse (buf, ' ');
+ break;
+
+ case '\r':
+ break;
+
+ case 'Å':
+ l = genmorse (buf, 'å');
+ break;
+ case 'Ä':
+ l = genmorse (buf, 'ä');
+ break;
+ case 'Ö':
+ l = genmorse (buf, 'ö');
+ break;
+ case 'Ü':
+ l = genmorse (buf, 'ü');
+ break;
+
+ default:
+ l = genmorse (buf, c);
+ }
+
+/*
+ * Next write whatever we have in the buffer. Note that this write will
+ * block but that time is at most the time required to play one morse
+ * code character. There is no need to avoid blocking because it doesn't cause
+ * any annoying delays.
+ *
+ * This is often the case with audio application. While many programmers think
+ * blocking is evil it's actually programmer's best friend.
+ */
+ if (write (audiofd, buf, 2 * l) != 2 * l)
+ {
+ perror ("write audio");
+ terminate (15);
+ }
+}
+
+/*
+ * The randomplay() routine picks a character from the list of characters
+ * selected for practice.
+ */
+static void
+randomplay (void)
+{
+ int old = playc;
+ if (totalchars == chars_to_play)
+ {
+ done = 1;
+ return;
+ }
+
+// while (playc==old)
+ {
+ int i, x, tmp;
+
+ x = random () % nrandom;
+ playc = randomlist[x];
+#if 1
+ if (x != nrandom - 1)
+ {
+ tmp = randomlist[x];
+ for (i = x; i < nrandom - 1; i++)
+ randomlist[i] = randomlist[i + 1];
+ randomlist[nrandom - 1] = tmp;
+ }
+#endif
+ }
+
+ playchar (playc);
+ totalchars++;
+}
+
+static int
+findcode (char c)
+{
+ int i;
+
+ for (i = 0; i < ncodes; i++)
+ if (Chars[i] == c)
+ return i;
+
+ return 0;
+}
+
+int
+main (int argc, char *argv[])
+{
+ char *devname = "/dev/dsp";
+ short buf[32 * BUFSZ];
+ char line[1024];
+ int i, parm;
+ int l, speed, wpm = 12;
+
+ fd_set readfds, writefds;
+
+ if (argc > 1)
+ devname = argv[1];
+
+ if (argc > 2)
+ {
+ wpm = atoi (argv[2]);
+ if (wpm == 0)
+ wpm = 12;
+ }
+
+ ncodes = strlen (Chars);
+
+ srandom (time (0));
+
+ if (argc > 3)
+ {
+ for (i = 3; i < argc; i++)
+ parse_charlist (argv[i]);
+ }
+ else
+ {
+ strcpy (randomlist, Chars);
+ nrandom = strlen (randomlist);
+ }
+
+ if (nrandom < 2)
+ {
+ printf ("Bad character list\n");
+ exit (-1);
+ }
+
+ randomlist[nrandom] = 0;
+
+ printf ("Practicing codes: %s\n", randomlist);
+ for (i = 0; i <= nrandom; i += 4)
+ {
+ int j, k;
+ char line[256], tmp[20];
+ memset (line, ' ', 80), line[78] = 0;
+
+ for (j = 0; j < 4; j++)
+ if (i + j <= nrandom)
+ {
+ int ix;
+
+ ix = findcode (randomlist[i + j]);
+
+ sprintf (tmp, "%c %s", randomlist[i + j], Codes[ix]);
+ for (k = 0; k < strlen (tmp); k++)
+ line[j * 20 + k] = tmp[k];
+ }
+
+ printf ("%s\n", line);
+ }
+
+ speed = wpm;
+
+ printf ("Words per minute %d. Characters per minute %d\n", wpm, wpm * 5);
+
+ dotsize = SRATE / speed;
+
+ if ((audiofd = open (devname, O_WRONLY, 0)) == -1)
+ {
+ perror (devname);
+ exit (-1);
+ }
+
+ parm = 0x0003000a;
+ ioctl (audiofd, SNDCTL_DSP_SETFRAGMENT, &parm);
+
+ parm = AFMT_S16_LE;
+ if (ioctl (audiofd, SNDCTL_DSP_SETFMT, &parm) == -1)
+ {
+ perror ("SETFMT");
+ close (audiofd);
+ exit (-1);
+ }
+
+ if (parm != AFMT_S16_LE)
+ {
+ printf
+ ("Error: 32/24 bit sample format is not supported by the device\n");
+ printf ("%08x/%08x\n", parm, AFMT_S16_LE);
+ close (audiofd);
+ exit (-1);
+ }
+
+ parm = SRATE;
+ if (ioctl (audiofd, SNDCTL_DSP_SPEED, &parm) == -1)
+ {
+ perror ("SPEED");
+ close (audiofd);
+ exit (-1);
+ }
+
+ if (parm != SRATE)
+ {
+ printf
+ ("Error: %d Hz sampling rate is not supported by the device (%d)\n",
+ SRATE, parm);
+ close (audiofd);
+ exit (-1);
+ }
+
+ if (tcgetattr (terminal_fd, &saved_ti) == -1)
+ {
+ perror ("tcgetattr");
+ exit (-1);
+ }
+
+ signal (SIGINT, terminate);
+/*
+ * Set up the terminal (stdin) for single character input.
+ */
+
+ if (tcgetattr (terminal_fd, &ti) == -1)
+ {
+ perror ("tcgetattr");
+ exit (-1);
+ }
+
+
+ ti.c_lflag &= ~(ECHO | ICANON | IEXTEN | ISIG);
+ ti.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON);
+ ti.c_cflag &= ~(CSIZE | PARENB);
+ ti.c_cflag |= CS8;
+ ti.c_oflag &= ~(OPOST);
+
+ ti.c_cc[VMIN] = 1;
+ ti.c_cc[VTIME] = 1;
+
+ if (tcsetattr (terminal_fd, TCSAFLUSH, &ti) == -1)
+ {
+ perror ("tcgetattr");
+ exit (-1);
+ }
+
+ a = 0.0;
+
+/*
+ * Play some "extra" audio data to delay the startup. This just gives
+ * some extra time to the user to prepare before we start.
+ */
+
+ step = 360.0 * 600.0 / parm;
+
+ l = 0;
+ l += genpulse (&buf[l], 1, 0);
+ write (audiofd, buf, l * 2);
+ memset (buf, 0, 4096);
+ for (i = 0; i < 2; i++)
+ write (audiofd, buf, 4096);
+
+/*
+ * The actual playback starts here
+ */
+
+ randomplay ();
+
+ t0 = time (0);
+ while (!done)
+ {
+ int n;
+
+/*
+ * Set up select for output events on the audio device and input events on
+ * the keyboard.
+ */
+ FD_ZERO (&readfds);
+ FD_ZERO (&writefds);
+
+ FD_SET (audiofd, &writefds);
+ FD_SET (0, &readfds);
+
+/*
+ * Call select with no timeouts
+ */
+ if ((n = select (audiofd + 1, &readfds, &writefds, NULL, NULL)) == -1)
+ {
+ perror ("select");
+ exit (-1);
+ }
+
+ if (n == 0)
+ continue;
+
+ if (FD_ISSET (0, &readfds)) /* 0 means stdin */
+ {
+/*
+ * Handling of keyboard input. Check if the answer was right.
+ */
+ if (read (0, line, 1) == 1)
+ {
+ if (*line == 27) /* ESC */
+ terminate (SIGINT);
+ if ((unsigned char) *line != (unsigned char) playc)
+ {
+ int x;
+
+ totalerrors++;
+ chars_to_play += 4;
+ randomlist[nrandom++] = playc;
+ randomlist[nrandom++] = playc;
+ for (x = 0; x < nrandom; x++)
+ if (randomlist[x] == *line)
+ {
+ randomlist[nrandom++] = *line;
+ break;
+ }
+ playerror ();
+ if (++errors > 3)
+ {
+ printf ("It is '%c' not '%c'\r\n", playc, *line);
+ fflush (stdout);
+ }
+ playchar (playc);
+ }
+ else
+ {
+ errors = 0;
+ randomplay ();
+ }
+ }
+ }
+
+ if (FD_ISSET (audiofd, &writefds))
+ {
+/*
+ * The audio device is ready to accept more data. Keep the device happy by
+ * writing some silent samples to it.
+ *
+ * Note that the real "playload" signal will be played by the playchar()
+ * routine.
+ */
+ memset (buf, 0, 1024);
+ write (audiofd, buf, 1024);
+ }
+ }
+
+/*
+ * Everything done. Restore the teminal settings and exit.
+ */
+ terminate (15);
+
+ close (audiofd);
+
+ exit (0);
+}
diff --git a/tutorials/sndkit/morse/morse3.c b/tutorials/sndkit/morse/morse3.c
new file mode 100644
index 0000000..22eb9c2
--- /dev/null
+++ b/tutorials/sndkit/morse/morse3.c
@@ -0,0 +1,572 @@
+/*
+ * Purpose: Yet another morse code program that uses select
+ * Copyright (C) 4Front Technologies, 2002-2004. Released under GPLv2/CDDL.
+ *
+ * Description:
+ * This program is a significantly more complicated version of
+ * {!nlink morse.c}. It uses the {!nlink select} system call to be able to
+ * handle keyboard input and audio output at the same time. It shows how
+ * to prevent output underruns by writing silent samples to the audio device
+ * when there is no "payload" signal to play.
+ *
+ * What the program does is playing randomly selected morse symbols
+ * (based on the command line options). At the same time it reads the keyboard
+ * and checks if the user typed the right character. This program
+ * doesn't stop to wait for the input. This simulates the real morse code
+ * exam but ufortunately this dosesn't work in practice.
+ *
+ * Parts on this program are common with {!nlink morse.c} and commented only
+ * there.
+ *
+ * The {!nlink morse2.c} program is a slightly different version of this one.
+ */
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+#include <fcntl.h>
+#include <math.h>
+#include <termios.h>
+#include <signal.h>
+#include <sys/time.h>
+#include <sys/types.h>
+#include <soundcard.h>
+
+#define BUFSZ (16*1024)
+#define SRATE 48000
+#define ATTACK 100
+#define CHARDELAY 3
+
+char randomlist[256];
+int nrandom = 0;
+int done = 0;
+int charspeed, charsize;
+
+int dotsize;
+int audiofd = -1;
+static int ncodes;
+static int playc;
+static int terminal_fd = 0;
+static struct termios ti, saved_ti;
+static int totalchars = 0;
+static time_t t0;
+
+double a, step;
+#include "charlist.h"
+
+int nplayed = 0, ntyped = 0;
+char played_chars[4096], typed_chars[4096];
+
+static void
+check_results (void)
+{
+ int i, j, n;
+ int errors = 0;
+
+ n = nplayed;
+
+ for (j = 0; j < n; j += 50)
+ {
+ printf ("Answer: ");
+ for (i = j; i < n && i < j + 50; i++)
+ {
+ if (i != j && !(i % 5))
+ printf (" ");
+ printf ("%c", typed_chars[i]);
+ }
+ printf ("\n");
+
+ printf ("Correct:");
+ for (i = j; i < n && i < j + 50; i++)
+ {
+ if (i != j && !(i % 5))
+ printf (" ");
+ if (typed_chars[i] != played_chars[i])
+ {
+ printf ("%c", played_chars[i]);
+ errors++;
+ }
+ else
+ printf (" ");
+ }
+ printf ("\n");
+ }
+ printf ("\n");
+
+ printf ("Errors: %d\n", errors);
+}
+
+static void
+terminate (int sig)
+{
+ time_t t;
+
+ t = time (0) - t0;
+
+ if (terminal_fd == -1)
+ return;
+
+ if (tcsetattr (terminal_fd, TCSAFLUSH, &saved_ti) == -1)
+ {
+ perror ("tcgetattr");
+ exit (-1);
+ }
+
+ printf ("\n\nTotal characters: %d\n", totalchars);
+ printf ("Elapsed time: %d seconds\n", t);
+
+ printf ("Characters per minute: %g\n",
+ t > 0?(float) totalchars / (float) t * 60.0:0);
+ printf ("\n");
+ check_results ();
+ exit (sig);
+}
+
+static int
+genpulse (short *buf, int w, int state)
+{
+ int i, l;
+ a = 0.0;
+
+ l = w * dotsize;
+
+ for (i = 0; i < ATTACK; i++)
+ {
+ double tmp = 0x7fff * cos (a * M_PI / 180.0);
+ tmp *= (double) (i) / (double) ATTACK;
+
+ *buf++ = (int) tmp *state;
+
+ a += step;
+ if (a > 360.0)
+ a -= 360.0;
+ }
+
+ for (i = ATTACK; i < l - ATTACK; i++)
+ {
+ double tmp = 0x7fff * cos (a * M_PI / 180.0);
+
+ *buf++ = (int) tmp *state;
+
+ a += step;
+ if (a > 360.0)
+ a -= 360.0;
+ }
+
+ for (i = l - ATTACK; i < l; i++)
+ {
+ double tmp = 0x7fff * cos (a * M_PI / 180.0);
+
+ tmp *= (double) (l - i) / (double) ATTACK;
+
+ *buf++ = (int) tmp *state;
+
+ a += step;
+ if (a > 360.0)
+ a -= 360.0;
+ }
+
+ return l;
+}
+
+static void
+playerror (void)
+{
+ short buffer[65536], *buf = buffer;
+ int i, l;
+ a = 0.0;
+
+ l = dotsize;
+
+ for (i = 0; i < ATTACK; i++)
+ {
+ double tmp = 0x7fff * cos (a * M_PI / 180.0);
+ tmp *= (double) (i) / (double) ATTACK;
+
+ *buf++ = (int) tmp;
+
+ a += step * 2.0;
+ if (a > 360.0)
+ a -= 360.0;
+ }
+
+ for (i = ATTACK; i < l - ATTACK; i++)
+ {
+ double tmp = 0x7fff * cos (a * M_PI / 180.0);
+
+ *buf++ = (int) tmp;
+
+ a += step * 2.0;
+ if (a > 360.0)
+ a -= 360.0;
+ }
+
+ for (i = l - ATTACK; i < l; i++)
+ {
+ double tmp = 0x7fff * cos (a * M_PI / 180.0);
+
+ tmp *= (double) (l - i) / (double) ATTACK;
+
+ *buf++ = (int) tmp;
+
+ a += step * 2.0;
+ if (a > 360.0)
+ a -= 360.0;
+ }
+
+ write (audiofd, buffer, 2 * l);
+}
+
+static int
+genmorse (short *buf, char c)
+{
+ int l = 0, i;
+ const char *s;
+
+ if (c == ' ')
+ return genpulse (buf, 4, 0);
+
+ for (i = 0; i < ncodes; i++)
+ if (Chars[i] == c)
+ {
+ s = Codes[i];
+
+ while (*s)
+ {
+ if (*s++ == '.')
+ l += genpulse (&buf[l], 1, 1);
+ else
+ l += genpulse (&buf[l], 3, 1);
+
+ l += genpulse (&buf[l], 1, 0);
+ }
+
+ l += genpulse (&buf[l], CHARDELAY, 0);
+ return l;
+ }
+
+ printf ("<?>");
+ fflush (stdout);
+ return 0;
+}
+
+static void
+playchar (char c)
+{
+ short buf[16 * BUFSZ];
+ int l;
+
+ l = 0;
+
+ if (c <= 'Z' && c >= 'A')
+ c += 32;
+
+ switch (c)
+ {
+ case ' ':
+ case '\n':
+ case '\t':
+ l = genmorse (buf, ' ');
+ break;
+
+ case '\r':
+ break;
+
+ case 'Å':
+ l = genmorse (buf, 'å');
+ break;
+ case 'Ä':
+ l = genmorse (buf, 'ä');
+ break;
+ case 'Ö':
+ l = genmorse (buf, 'ö');
+ break;
+ case 'Ü':
+ l = genmorse (buf, 'ü');
+ break;
+
+ default:
+ l = genmorse (buf, c);
+ }
+
+ write (audiofd, buf, 2 * l);
+ if (2 * l < charsize)
+ {
+ char tmp[512 * 1024];
+ l = charsize - 2 * l;
+ memset (tmp, 0, l);
+ write (audiofd, tmp, l);
+ }
+}
+
+static void
+randomplay (void)
+{
+ int old = playc;
+ if (totalchars == 100)
+ {
+ return;
+ }
+
+// while (playc==old)
+ {
+ playc = random () % nrandom;
+ playc = randomlist[playc];
+ }
+
+ playchar (playc);
+ played_chars[nplayed++] = playc;
+ totalchars++;
+}
+
+static int
+findcode (char c)
+{
+ int i;
+
+ for (i = 0; i < ncodes; i++)
+ if (Chars[i] == c)
+ return i;
+
+ return 0;
+}
+
+static void
+editor (char c)
+{
+ int i;
+
+ if (c == 27) /* ESC */
+ terminate (SIGINT);
+
+ if (c == 8) /* BS */
+ {
+ if (ntyped > 0)
+ ntyped--;
+ return;
+ }
+
+ if (c == ' ') /* Sync */
+ {
+ for (i = ntyped; i < nplayed; i++)
+ typed_chars[i] = '_'; /* Empty placeholder */
+ ntyped = nplayed;
+ ioctl (audiofd, SNDCTL_DSP_HALT, 0);
+ return;
+ }
+ typed_chars[ntyped++] = c;
+
+ if (ntyped >= 100)
+ done = 1;
+}
+
+int
+main (int argc, char *argv[])
+{
+ char *devname = "/dev/dsp";
+ short buf[16 * BUFSZ];
+ char line[1024];
+ int i, parm;
+ int l, speed, wpm = 12;
+
+ fd_set readfds, writefds;
+
+ if (argc > 1)
+ devname = argv[1];
+
+ if (argc > 2)
+ {
+ wpm = atoi (argv[2]);
+ if (wpm == 0)
+ wpm = 12;
+ }
+
+ ncodes = strlen (Chars);
+
+ srandom (time (0));
+
+ if (argc > 3)
+ {
+ for (i = 3; i < argc; i++)
+ parse_charlist (argv[i]);
+ }
+ else
+ {
+ strcpy (randomlist, Chars);
+ nrandom = strlen (randomlist);
+ }
+
+ if (nrandom < 2)
+ {
+ printf ("Bad character list\n");
+ exit (-1);
+ }
+
+ randomlist[nrandom] = 0;
+
+ memset (typed_chars, ' ', sizeof (typed_chars));
+
+ printf ("Practicing codes: %s\n", randomlist);
+ for (i = 0; i <= nrandom; i += 4)
+ {
+ int j, k;
+ char line[256], tmp[20];
+ memset (line, ' ', 80), line[78] = 0;
+
+ for (j = 0; j < 4; j++)
+ if (i + j <= nrandom)
+ {
+ int ix;
+
+ ix = findcode (randomlist[i + j]);
+
+ sprintf (tmp, "%c %s", randomlist[i + j], Codes[ix]);
+ for (k = 0; k < strlen (tmp); k++)
+ line[j * 20 + k] = tmp[k];
+ }
+
+ printf ("%s\n", line);
+ }
+
+ speed = wpm;
+
+ printf ("Words per minute %d. Characters per minute %d\n", wpm, wpm * 5);
+
+ dotsize = SRATE / speed;
+
+ if ((audiofd = open (devname, O_WRONLY, 0)) == -1)
+ {
+ perror (devname);
+ exit (-1);
+ }
+
+ parm = 0x0004000a;
+ ioctl (audiofd, SNDCTL_DSP_SETFRAGMENT, &parm);
+
+ parm = AFMT_S16_LE;
+ if (ioctl (audiofd, SNDCTL_DSP_SETFMT, &parm) == -1)
+ {
+ perror ("SETFMT");
+ close (audiofd);
+ exit (-1);
+ }
+
+ if (parm != AFMT_S16_LE)
+ {
+ printf
+ ("Error: 32/24 bit sample format is not supported by the device\n");
+ printf ("%08x/%08x\n", parm, AFMT_S16_LE);
+ close (audiofd);
+ exit (-1);
+ }
+
+ parm = SRATE;
+ if (ioctl (audiofd, SNDCTL_DSP_SPEED, &parm) == -1)
+ {
+ perror ("SPEED");
+ close (audiofd);
+ exit (-1);
+ }
+
+ if (parm != SRATE)
+ {
+ printf
+ ("Error: %d Hz sampling rate is not supported by the device (%d)\n",
+ SRATE, parm);
+ close (audiofd);
+ exit (-1);
+ }
+
+ if (tcgetattr (terminal_fd, &saved_ti) == -1)
+ {
+ perror ("tcgetattr");
+ exit (-1);
+ }
+
+ signal (SIGINT, terminate);
+/*
+ * Line setup
+ */
+
+ if (tcgetattr (terminal_fd, &ti) == -1)
+ {
+ perror ("tcgetattr");
+ exit (-1);
+ }
+
+
+ ti.c_lflag &= ~(ECHO | ICANON | IEXTEN | ISIG);
+ ti.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON);
+ ti.c_cflag &= ~(CSIZE | PARENB);
+ ti.c_cflag |= CS8;
+ ti.c_oflag &= ~(OPOST);
+
+ ti.c_cc[VMIN] = 1;
+ ti.c_cc[VTIME] = 1;
+
+ if (tcsetattr (terminal_fd, TCSAFLUSH, &ti) == -1)
+ {
+ perror ("tcgetattr");
+ exit (-1);
+ }
+
+ a = 0.0;
+
+ step = 360.0 * 600.0 / parm;
+
+ l = 0;
+ l += genpulse (&buf[l], 1, 0);
+ write (audiofd, buf, l * 2);
+ memset (buf, 0, 4096);
+ for (i = 0; i < 2; i++)
+ write (audiofd, buf, 4096);
+
+ charspeed = speed * 5;
+ if (charspeed > 25)
+ charspeed = 25;
+ charsize = 60 * SRATE * 2 / charspeed;
+ printf ("Charrate %d chars/min -> (%d samples)\n", charspeed, charsize);
+
+ printf ("\r\n");
+ randomplay ();
+
+ t0 = time (0);
+ while (!done)
+ {
+ int n;
+
+ FD_ZERO (&readfds);
+ FD_ZERO (&writefds);
+
+ FD_SET (audiofd, &writefds);
+ FD_SET (0, &readfds);
+
+ if ((n = select (audiofd + 1, &readfds, &writefds, NULL, NULL)) == -1)
+ {
+ perror ("select");
+ exit (-1);
+ }
+
+ if (n == 0)
+ continue;
+
+ if (FD_ISSET (0, &readfds))
+ {
+ if (read (0, line, 1) == 1)
+ editor (*line);
+ }
+
+ if (FD_ISSET (audiofd, &writefds))
+ {
+ if (!(nplayed % 5))
+ playchar (' ');
+ randomplay ();
+ }
+ }
+
+ terminate (15);
+
+ close (audiofd);
+
+ exit (0);
+}
diff --git a/tutorials/sndkit/morse/randomcw b/tutorials/sndkit/morse/randomcw
new file mode 100644
index 0000000..ed36b75
--- /dev/null
+++ b/tutorials/sndkit/morse/randomcw
@@ -0,0 +1,2 @@
+#!/bin/sh
+loadcw|tee x|morse $*;tr 'a-zåäö' 'A-ZÅÄÖ' < x
diff --git a/tutorials/sndkit/morse/testgen.c b/tutorials/sndkit/morse/testgen.c
new file mode 100644
index 0000000..b74df4b
--- /dev/null
+++ b/tutorials/sndkit/morse/testgen.c
@@ -0,0 +1,65 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <math.h>
+
+int ncodes;
+
+char randomlist[256];
+int nrandom = 0;
+
+#include "charlist.h"
+
+int
+main (int argc, char *argv[])
+{
+ int ngroups = 0, maxgroups = 20;
+ ncodes = strlen (Chars);
+
+ srandom (time (0));
+
+ if (argc > 1)
+ {
+ parse_charlist (argv[1]);
+ }
+ else
+ {
+ strcpy (randomlist, Chars);
+ nrandom = strlen (randomlist);
+ }
+
+ if (argc > 2)
+ maxgroups = atoi (argv[2]);
+
+ if (nrandom < 2)
+ {
+ printf ("Bad character list\n");
+ exit (-1);
+ }
+
+ while (1)
+ {
+ int i, c;
+
+ if (ngroups && !(ngroups % 5))
+ printf ("\n");
+
+ if (ngroups++ >= maxgroups)
+ {
+ printf ("\n");
+ exit (0);
+ }
+
+
+ for (i = 0; i < 5; i++)
+ {
+ c = random () % nrandom;
+
+ printf ("%c", randomlist[c]);
+ }
+
+ printf (" ");
+ fflush (stdout);
+ }
+}