Home » Archimedes archive » Archimedes World » AW-1991-10.adf » October91 » !AWOct91/Goodies/FiveAlive/WFCOUNT

!AWOct91/Goodies/FiveAlive/WFCOUNT

This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.

Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.

Tape/disk: Home » Archimedes archive » Archimedes World » AW-1991-10.adf » October91
Filename: !AWOct91/Goodies/FiveAlive/WFCOUNT
Read OK:
File size: 0D30 bytes
Load address: 0000
Exec address: 0000
File contents
   10REM >WFCOUNT
   20REM Jonathan Evans July 1991
   30REM Performs word frequency count on text file using
   40REM binary trees
   50
   60PROCinit
   70PROCreadwords
   80PROCsearch
   90PROCprintwords
  100CLOSE#0
  110END
  120
  130DEFPROCinit
  140maxwords = 2000: REM Maximum number of different words in text
  150DIM word$(maxwords),leftbranch(maxwords),rightbranch(maxwords),frequency(maxwords)
  160outfile$="WORDLIST"
  170F=OPENIN("TEXT")
  180count=0
  190verbose=FALSE
  200ENDPROC
  210
  220DEFPROCreadwords
  230LOCAL word$,t1,wc
  240PRINT "Reading words from file"'
  250t1=TIME
  260WHILE NOT EOF#F
  270word$ = FNnextword(F)
  280PROCput_word_in_tree(word$)
  290wc +=1
  300IF verbose THEN
  310PRINT word$
  320ELSE
  330IF wc MOD 100 = 0 PRINT wc; " words read"
  331ENDIF
  340ENDWHILE
  350PRINT ; wc;" words read from file in ";(TIME-t1)/100;" seconds"
  360ENDPROC
  370
  380DEFFNnextword(F)
  390LOCAL c%,w$
  400REPEAT
  410c% = BGET#F
  420UNTIL FNletter(c%) OR EOF#F
  430IF EOF#F THEN =""
  440w$ = FNlower(c%)
  450REPEAT
  460c%=BGET#F
  470IF FNletter(c%) THEN w$ += FNlower(c%)
  480UNTIL NOT FNletter(c%) OR EOF#F
  490=w$
  500
  510DEFFNletter(a%)
  520REM Checks if Ascii code is a letter
  530=((a%>64 AND a%<91) OR (a% >96 AND a%<123))
  540
  550DEFFNlower(c%)
  560REM Returns lower case letter from ASCII code
  570IF c% <91 THEN c%+=32
  580=CHR$c%
  590
  600DEFFNlower_word(w$)
  610LOCAL l,w1$: w1$=""
  620FOR l = 1 TO LENw$
  630w1$+=FNlower(ASC(MID$(w$,l,1)))
  640NEXT l
  650=w1$
  660
  670DEFPROCput_word_in_tree(word$)
  680IF count = 0 THEN
  690PROCput_new_word(0,word$)
  700count = 1
  710ELSE
  720PROCput_word(0,word$)
  730ENDIF
  740ENDPROC
  750
  760DEFPROCput_new_word(loc,word$)
  770word$(loc) = word$
  780frequency(loc) = 1
  790leftbranch(loc)=0
  800rightbranch(loc)=0
  810IF verbose THEN PRINT "NEW WORD: ";
  820ENDPROC
  830
  840DEFPROCput_word(loc,word$)
  850LOCAL lword$
  860lword$ = word$(loc)
  870IF word$ = lword$ THEN PROCdup_word(loc):ENDPROC
  880IF word$ < lword$ THEN
  890CASE leftbranch(loc) OF
  900WHEN 0
  910count +=1: leftbranch(loc)=count
  920PROCput_new_word(count,word$)
  930OTHERWISE
  940PROCput_word(leftbranch(loc),word$)
  950ENDCASE
  960ELSE
  970CASE rightbranch(loc) OF
  980WHEN 0
  990count +=1: rightbranch(loc)=count
 1000PROCput_new_word(count,word$)
 1010OTHERWISE
 1020PROCput_word(rightbranch(loc),word$)
 1030ENDCASE
 1040ENDIF
 1050ENDPROC
 1060
 1070DEFPROCdup_word(loc)
 1080frequency(loc)+=1
 1090IF verbose THEN PRINT "DUPLICATE (";frequency(loc);") :";
 1100ENDPROC
 1110
 1120DEFPROCsearch
 1130LOCAL word$,freq
 1140PRINT '"Enter words for frequency count (RETURN to end)"'
 1150REPEAT
 1160INPUT word$
 1170IF word$ >"" THEN
 1180word$ = FNlower_word(word$)
 1190freq = FNwordfreq(0,word$)
 1200IF freq = 0 THEN PRINT "Word not found" ELSE PRINT;freq; " occurrences"
 1210ENDIF
 1220UNTIL word$=""
 1230ENDPROC
 1240
 1250DEFFNwordfreq(loc,word$)
 1260LOCAL lword$
 1270lword$ = word$(loc)
 1280IF word$ = lword$ THEN = frequency(loc)
 1290IF word$ < lword$ THEN
 1300IF leftbranch(loc) = 0 THEN
 1310=0
 1320ELSE
 1330=FNwordfreq(leftbranch(loc),word$)
 1340ENDIF
 1350ELSE
 1360IF rightbranch(loc)=0 THEN
 1370=0
 1380ELSE
 1390=FNwordfreq(rightbranch(loc),word$)
 1400ENDIF
 1410ENDIF
 1420
 1430DEFPROCprintwords
 1440PRINT '"Printing word list to file "outfile$
 1450outfile = OPENOUT(outfile$)
 1460PROCprintwd(0)
 1470CLOSE #outfile
 1480OSCLI "SETTYPE "+outfile$+" FFF"
 1490ENDPROC
 1500
 1510DEFPROCprintwd(loc)
 1520LOCAL s$
 1530REM Recursive routine to print words from binary tree
 1540REM
 1550REM Print words to left of current location
 1560IF leftbranch(loc) > 0 THEN PROCprintwd(leftbranch(loc))
 1570REM Print word at current location
 1580s$ = FNpadright(word$(loc),25)+FNpadleft(STR$frequency(loc),4)
 1590REM PRINT s$
 1600BPUT#outfile,s$
 1610REM Print word to the right of current location
 1620IF rightbranch(loc) >0 THEN PROCprintwd(rightbranch(loc))
 1630ENDPROC
 1640
 1650DEFFNpadleft(S$,length%)
 1660REM pads string with leading blanks to make size length%
 1670=STRING$(length%-LENS$," ")+S$
 1680
 1690DEFFNpadright(S$,length%)
 1700REM pads string with trailing blanks to make size length%
 1710=S$ + STRING$(length%-LENS$," ")
 1720

� >WFCOUNT
� Jonathan Evans July 1991
6� Performs word frequency count on text file using
(� binary trees
2
<	�init
F�readwords
P�search
Z�printwords
d�#0
n�
x
�
��init
�@maxwords = 2000: � Maximum number of different words in text
�T� word$(maxwords),leftbranch(maxwords),rightbranch(maxwords),frequency(maxwords)
�outfile$="WORDLIST"
�F=�("TEXT")
�count=0
�
verbose=�
��
�
���readwords
�� word$,t1,wc
� � "Reading words from file"'
�t1=�
ȕ � �#F
word$ = �nextword(F)
�put_word_in_tree(word$)
"
wc +=1
,� verbose �
6� word$
@�
J&� wc � 100 = 0 � wc; " words read"
K�
T�
^<� ; wc;" words read from file in ";(�-t1)/100;" seconds"
h�
r
|ݤnextword(F)
�� c%,w$
��
�c% = �#F
�� �letter(c%) � �#F
�� �#F � =""
�w$ = �lower(c%)
��
�
c%=�#F
�$� �letter(c%) � w$ += �lower(c%)
�� � �letter(c%) � �#F
�=w$
�
�ݤletter(a%)
&� Checks if Ascii code is a letter
*=((a%>64 � a%<91) � (a% >96 � a%<123))

&ݤlower(c%)
0/� Returns lower case letter from ASCII code
:� c% <91 � c%+=32
D=�c%
N
Xݤlower_word(w$)
b� l,w1$: w1$=""
l� l = 1 � �w$
vw1$+=�lower(�(�w$,l,1)))
�� l
�=w1$
�
���put_word_in_tree(word$)
�� count = 0 �
��put_new_word(0,word$)
�
count = 1
��
��put_word(0,word$)
��
��
�
���put_new_word(loc,word$)
word$(loc) = word$
frequency(loc) = 1
leftbranch(loc)=0
 rightbranch(loc)=0
*� verbose � � "NEW WORD: ";
4�
>
H��put_word(loc,word$)
R� lword$
\lword$ = word$(loc)
f'� word$ = lword$ � �dup_word(loc):�
p� word$ < lword$ �
zȎ leftbranch(loc) �
�� 0
�$count +=1: leftbranch(loc)=count
��put_new_word(count,word$)
�
�$�put_word(leftbranch(loc),word$)
��
��
�Ȏ rightbranch(loc) �
�� 0
�%count +=1: rightbranch(loc)=count
��put_new_word(count,word$)
�
�%�put_word(rightbranch(loc),word$)
�
�
�
$
.��dup_word(loc)
8frequency(loc)+=1
B5� verbose � � "DUPLICATE (";frequency(loc);") :";
L�
V
`��search
j� word$,freq
t9� '"Enter words for frequency count (RETURN to end)"'
~�
�� word$
�� word$ >"" �
�word$ = �lower_word(word$)
�freq = �wordfreq(0,word$)
�<� freq = 0 � � "Word not found" � �;freq; " occurrences"
��
�� word$=""
��
�
�ݤwordfreq(loc,word$)
�� lword$
�lword$ = word$(loc)
'� word$ = lword$ � = frequency(loc)

� word$ < lword$ �
� leftbranch(loc) = 0 �
=0
(�
2%=�wordfreq(leftbranch(loc),word$)
<�
F�
P� rightbranch(loc)=0 �
Z=0
d�
n&=�wordfreq(rightbranch(loc),word$)
x�
��
�
���printwords
�,� '"Printing word list to file "outfile$
�outfile = �(outfile$)
��printwd(0)
�� #outfile
� � "SETTYPE "+outfile$+" FFF"
��
�
���printwd(loc)
�� s$
�7� Recursive routine to print words from binary tree
�
-� Print words to left of current location
5� leftbranch(loc) > 0 � �printwd(leftbranch(loc))
"$� Print word at current location
,=s$ = �padright(word$(loc),25)+�padleft(�frequency(loc),4)
6� PRINT s$
@�#outfile,s$
J1� Print word to the right of current location
T6� rightbranch(loc) >0 � �printwd(rightbranch(loc))
^�
h
rݤpadleft(S$,length%)
|:� pads string with leading blanks to make size length%
�=�length%-�S$," ")+S$
�
�ݤpadright(S$,length%)
�;� pads string with trailing blanks to make size length%
�=S$ + �length%-�S$," ")
�
�
00000000  0d 00 0a 0e f4 20 3e 57  46 43 4f 55 4e 54 0d 00  |..... >WFCOUNT..|
00000010  14 1e f4 20 4a 6f 6e 61  74 68 61 6e 20 45 76 61  |... Jonathan Eva|
00000020  6e 73 20 4a 75 6c 79 20  31 39 39 31 0d 00 1e 36  |ns July 1991...6|
00000030  f4 20 50 65 72 66 6f 72  6d 73 20 77 6f 72 64 20  |. Performs word |
00000040  66 72 65 71 75 65 6e 63  79 20 63 6f 75 6e 74 20  |frequency count |
00000050  6f 6e 20 74 65 78 74 20  66 69 6c 65 20 75 73 69  |on text file usi|
00000060  6e 67 0d 00 28 12 f4 20  62 69 6e 61 72 79 20 74  |ng..(.. binary t|
00000070  72 65 65 73 0d 00 32 04  0d 00 3c 09 f2 69 6e 69  |rees..2...<..ini|
00000080  74 0d 00 46 0e f2 72 65  61 64 77 6f 72 64 73 0d  |t..F..readwords.|
00000090  00 50 0b f2 73 65 61 72  63 68 0d 00 5a 0f f2 70  |.P..search..Z..p|
000000a0  72 69 6e 74 77 6f 72 64  73 0d 00 64 07 d9 23 30  |rintwords..d..#0|
000000b0  0d 00 6e 05 e0 0d 00 78  04 0d 00 82 0a dd f2 69  |..n....x.......i|
000000c0  6e 69 74 0d 00 8c 40 6d  61 78 77 6f 72 64 73 20  |nit...@maxwords |
000000d0  3d 20 32 30 30 30 3a 20  f4 20 4d 61 78 69 6d 75  |= 2000: . Maximu|
000000e0  6d 20 6e 75 6d 62 65 72  20 6f 66 20 64 69 66 66  |m number of diff|
000000f0  65 72 65 6e 74 20 77 6f  72 64 73 20 69 6e 20 74  |erent words in t|
00000100  65 78 74 0d 00 96 54 de  20 77 6f 72 64 24 28 6d  |ext...T. word$(m|
00000110  61 78 77 6f 72 64 73 29  2c 6c 65 66 74 62 72 61  |axwords),leftbra|
00000120  6e 63 68 28 6d 61 78 77  6f 72 64 73 29 2c 72 69  |nch(maxwords),ri|
00000130  67 68 74 62 72 61 6e 63  68 28 6d 61 78 77 6f 72  |ghtbranch(maxwor|
00000140  64 73 29 2c 66 72 65 71  75 65 6e 63 79 28 6d 61  |ds),frequency(ma|
00000150  78 77 6f 72 64 73 29 0d  00 a0 17 6f 75 74 66 69  |xwords)....outfi|
00000160  6c 65 24 3d 22 57 4f 52  44 4c 49 53 54 22 0d 00  |le$="WORDLIST"..|
00000170  aa 0f 46 3d 8e 28 22 54  45 58 54 22 29 0d 00 b4  |..F=.("TEXT")...|
00000180  0b 63 6f 75 6e 74 3d 30  0d 00 be 0d 76 65 72 62  |.count=0....verb|
00000190  6f 73 65 3d a3 0d 00 c8  05 e1 0d 00 d2 04 0d 00  |ose=............|
000001a0  dc 0f dd f2 72 65 61 64  77 6f 72 64 73 0d 00 e6  |....readwords...|
000001b0  11 ea 20 77 6f 72 64 24  2c 74 31 2c 77 63 0d 00  |.. word$,t1,wc..|
000001c0  f0 20 f1 20 22 52 65 61  64 69 6e 67 20 77 6f 72  |. . "Reading wor|
000001d0  64 73 20 66 72 6f 6d 20  66 69 6c 65 22 27 0d 00  |ds from file"'..|
000001e0  fa 08 74 31 3d 91 0d 01  04 0c c8 95 20 ac 20 c5  |..t1=....... . .|
000001f0  23 46 0d 01 0e 18 77 6f  72 64 24 20 3d 20 a4 6e  |#F....word$ = .n|
00000200  65 78 74 77 6f 72 64 28  46 29 0d 01 18 1c f2 70  |extword(F).....p|
00000210  75 74 5f 77 6f 72 64 5f  69 6e 5f 74 72 65 65 28  |ut_word_in_tree(|
00000220  77 6f 72 64 24 29 0d 01  22 0a 77 63 20 2b 3d 31  |word$)..".wc +=1|
00000230  0d 01 2c 0f e7 20 76 65  72 62 6f 73 65 20 8c 0d  |..,.. verbose ..|
00000240  01 36 0b f1 20 77 6f 72  64 24 0d 01 40 05 cc 0d  |.6.. word$..@...|
00000250  01 4a 26 e7 20 77 63 20  83 20 31 30 30 20 3d 20  |.J&. wc . 100 = |
00000260  30 20 f1 20 77 63 3b 20  22 20 77 6f 72 64 73 20  |0 . wc; " words |
00000270  72 65 61 64 22 0d 01 4b  05 cd 0d 01 54 05 ce 0d  |read"..K....T...|
00000280  01 5e 3c f1 20 3b 20 77  63 3b 22 20 77 6f 72 64  |.^<. ; wc;" word|
00000290  73 20 72 65 61 64 20 66  72 6f 6d 20 66 69 6c 65  |s read from file|
000002a0  20 69 6e 20 22 3b 28 91  2d 74 31 29 2f 31 30 30  | in ";(.-t1)/100|
000002b0  3b 22 20 73 65 63 6f 6e  64 73 22 0d 01 68 05 e1  |;" seconds"..h..|
000002c0  0d 01 72 04 0d 01 7c 11  dd a4 6e 65 78 74 77 6f  |..r...|...nextwo|
000002d0  72 64 28 46 29 0d 01 86  0b ea 20 63 25 2c 77 24  |rd(F)..... c%,w$|
000002e0  0d 01 90 05 f5 0d 01 9a  0c 63 25 20 3d 20 9a 23  |.........c% = .#|
000002f0  46 0d 01 a4 17 fd 20 a4  6c 65 74 74 65 72 28 63  |F..... .letter(c|
00000300  25 29 20 84 20 c5 23 46  0d 01 ae 0f e7 20 c5 23  |%) . .#F..... .#|
00000310  46 20 8c 20 3d 22 22 0d  01 b8 13 77 24 20 3d 20  |F . =""....w$ = |
00000320  a4 6c 6f 77 65 72 28 63  25 29 0d 01 c2 05 f5 0d  |.lower(c%)......|
00000330  01 cc 0a 63 25 3d 9a 23  46 0d 01 d6 24 e7 20 a4  |...c%=.#F...$. .|
00000340  6c 65 74 74 65 72 28 63  25 29 20 8c 20 77 24 20  |letter(c%) . w$ |
00000350  2b 3d 20 a4 6c 6f 77 65  72 28 63 25 29 0d 01 e0  |+= .lower(c%)...|
00000360  19 fd 20 ac 20 a4 6c 65  74 74 65 72 28 63 25 29  |.. . .letter(c%)|
00000370  20 84 20 c5 23 46 0d 01  ea 07 3d 77 24 0d 01 f4  | . .#F....=w$...|
00000380  04 0d 01 fe 10 dd a4 6c  65 74 74 65 72 28 61 25  |.......letter(a%|
00000390  29 0d 02 08 26 f4 20 43  68 65 63 6b 73 20 69 66  |)...&. Checks if|
000003a0  20 41 73 63 69 69 20 63  6f 64 65 20 69 73 20 61  | Ascii code is a|
000003b0  20 6c 65 74 74 65 72 0d  02 12 2a 3d 28 28 61 25  | letter...*=((a%|
000003c0  3e 36 34 20 80 20 61 25  3c 39 31 29 20 84 20 28  |>64 . a%<91) . (|
000003d0  61 25 20 3e 39 36 20 80  20 61 25 3c 31 32 33 29  |a% >96 . a%<123)|
000003e0  29 0d 02 1c 04 0d 02 26  0f dd a4 6c 6f 77 65 72  |)......&...lower|
000003f0  28 63 25 29 0d 02 30 2f  f4 20 52 65 74 75 72 6e  |(c%)..0/. Return|
00000400  73 20 6c 6f 77 65 72 20  63 61 73 65 20 6c 65 74  |s lower case let|
00000410  74 65 72 20 66 72 6f 6d  20 41 53 43 49 49 20 63  |ter from ASCII c|
00000420  6f 64 65 0d 02 3a 15 e7  20 63 25 20 3c 39 31 20  |ode..:.. c% <91 |
00000430  8c 20 63 25 2b 3d 33 32  0d 02 44 08 3d bd 63 25  |. c%+=32..D.=.c%|
00000440  0d 02 4e 04 0d 02 58 14  dd a4 6c 6f 77 65 72 5f  |..N...X...lower_|
00000450  77 6f 72 64 28 77 24 29  0d 02 62 13 ea 20 6c 2c  |word(w$)..b.. l,|
00000460  77 31 24 3a 20 77 31 24  3d 22 22 0d 02 6c 11 e3  |w1$: w1$=""..l..|
00000470  20 6c 20 3d 20 31 20 b8  20 a9 77 24 0d 02 76 1c  | l = 1 . .w$..v.|
00000480  77 31 24 2b 3d a4 6c 6f  77 65 72 28 97 28 c1 77  |w1$+=.lower(.(.w|
00000490  24 2c 6c 2c 31 29 29 29  0d 02 80 07 ed 20 6c 0d  |$,l,1)))..... l.|
000004a0  02 8a 08 3d 77 31 24 0d  02 94 04 0d 02 9e 1d dd  |...=w1$.........|
000004b0  f2 70 75 74 5f 77 6f 72  64 5f 69 6e 5f 74 72 65  |.put_word_in_tre|
000004c0  65 28 77 6f 72 64 24 29  0d 02 a8 11 e7 20 63 6f  |e(word$)..... co|
000004d0  75 6e 74 20 3d 20 30 20  8c 0d 02 b2 1a f2 70 75  |unt = 0 ......pu|
000004e0  74 5f 6e 65 77 5f 77 6f  72 64 28 30 2c 77 6f 72  |t_new_word(0,wor|
000004f0  64 24 29 0d 02 bc 0d 63  6f 75 6e 74 20 3d 20 31  |d$)....count = 1|
00000500  0d 02 c6 05 cc 0d 02 d0  16 f2 70 75 74 5f 77 6f  |..........put_wo|
00000510  72 64 28 30 2c 77 6f 72  64 24 29 0d 02 da 05 cd  |rd(0,word$).....|
00000520  0d 02 e4 05 e1 0d 02 ee  04 0d 02 f8 1d dd f2 70  |...............p|
00000530  75 74 5f 6e 65 77 5f 77  6f 72 64 28 6c 6f 63 2c  |ut_new_word(loc,|
00000540  77 6f 72 64 24 29 0d 03  02 16 77 6f 72 64 24 28  |word$)....word$(|
00000550  6c 6f 63 29 20 3d 20 77  6f 72 64 24 0d 03 0c 16  |loc) = word$....|
00000560  66 72 65 71 75 65 6e 63  79 28 6c 6f 63 29 20 3d  |frequency(loc) =|
00000570  20 31 0d 03 16 15 6c 65  66 74 62 72 61 6e 63 68  | 1....leftbranch|
00000580  28 6c 6f 63 29 3d 30 0d  03 20 16 72 69 67 68 74  |(loc)=0.. .right|
00000590  62 72 61 6e 63 68 28 6c  6f 63 29 3d 30 0d 03 2a  |branch(loc)=0..*|
000005a0  1f e7 20 76 65 72 62 6f  73 65 20 8c 20 f1 20 22  |.. verbose . . "|
000005b0  4e 45 57 20 57 4f 52 44  3a 20 22 3b 0d 03 34 05  |NEW WORD: ";..4.|
000005c0  e1 0d 03 3e 04 0d 03 48  19 dd f2 70 75 74 5f 77  |...>...H...put_w|
000005d0  6f 72 64 28 6c 6f 63 2c  77 6f 72 64 24 29 0d 03  |ord(loc,word$)..|
000005e0  52 0c ea 20 6c 77 6f 72  64 24 0d 03 5c 17 6c 77  |R.. lword$..\.lw|
000005f0  6f 72 64 24 20 3d 20 77  6f 72 64 24 28 6c 6f 63  |ord$ = word$(loc|
00000600  29 0d 03 66 27 e7 20 77  6f 72 64 24 20 3d 20 6c  |)..f'. word$ = l|
00000610  77 6f 72 64 24 20 8c 20  f2 64 75 70 5f 77 6f 72  |word$ . .dup_wor|
00000620  64 28 6c 6f 63 29 3a e1  0d 03 70 16 e7 20 77 6f  |d(loc):...p.. wo|
00000630  72 64 24 20 3c 20 6c 77  6f 72 64 24 20 8c 0d 03  |rd$ < lword$ ...|
00000640  7a 18 c8 8e 20 6c 65 66  74 62 72 61 6e 63 68 28  |z... leftbranch(|
00000650  6c 6f 63 29 20 ca 0d 03  84 07 c9 20 30 0d 03 8e  |loc) ...... 0...|
00000660  24 63 6f 75 6e 74 20 2b  3d 31 3a 20 6c 65 66 74  |$count +=1: left|
00000670  62 72 61 6e 63 68 28 6c  6f 63 29 3d 63 6f 75 6e  |branch(loc)=coun|
00000680  74 0d 03 98 1e f2 70 75  74 5f 6e 65 77 5f 77 6f  |t.....put_new_wo|
00000690  72 64 28 63 6f 75 6e 74  2c 77 6f 72 64 24 29 0d  |rd(count,word$).|
000006a0  03 a2 05 7f 0d 03 ac 24  f2 70 75 74 5f 77 6f 72  |.......$.put_wor|
000006b0  64 28 6c 65 66 74 62 72  61 6e 63 68 28 6c 6f 63  |d(leftbranch(loc|
000006c0  29 2c 77 6f 72 64 24 29  0d 03 b6 05 cb 0d 03 c0  |),word$)........|
000006d0  05 cc 0d 03 ca 19 c8 8e  20 72 69 67 68 74 62 72  |........ rightbr|
000006e0  61 6e 63 68 28 6c 6f 63  29 20 ca 0d 03 d4 07 c9  |anch(loc) ......|
000006f0  20 30 0d 03 de 25 63 6f  75 6e 74 20 2b 3d 31 3a  | 0...%count +=1:|
00000700  20 72 69 67 68 74 62 72  61 6e 63 68 28 6c 6f 63  | rightbranch(loc|
00000710  29 3d 63 6f 75 6e 74 0d  03 e8 1e f2 70 75 74 5f  |)=count.....put_|
00000720  6e 65 77 5f 77 6f 72 64  28 63 6f 75 6e 74 2c 77  |new_word(count,w|
00000730  6f 72 64 24 29 0d 03 f2  05 7f 0d 03 fc 25 f2 70  |ord$)........%.p|
00000740  75 74 5f 77 6f 72 64 28  72 69 67 68 74 62 72 61  |ut_word(rightbra|
00000750  6e 63 68 28 6c 6f 63 29  2c 77 6f 72 64 24 29 0d  |nch(loc),word$).|
00000760  04 06 05 cb 0d 04 10 05  cd 0d 04 1a 05 e1 0d 04  |................|
00000770  24 04 0d 04 2e 13 dd f2  64 75 70 5f 77 6f 72 64  |$.......dup_word|
00000780  28 6c 6f 63 29 0d 04 38  15 66 72 65 71 75 65 6e  |(loc)..8.frequen|
00000790  63 79 28 6c 6f 63 29 2b  3d 31 0d 04 42 35 e7 20  |cy(loc)+=1..B5. |
000007a0  76 65 72 62 6f 73 65 20  8c 20 f1 20 22 44 55 50  |verbose . . "DUP|
000007b0  4c 49 43 41 54 45 20 28  22 3b 66 72 65 71 75 65  |LICATE (";freque|
000007c0  6e 63 79 28 6c 6f 63 29  3b 22 29 20 3a 22 3b 0d  |ncy(loc);") :";.|
000007d0  04 4c 05 e1 0d 04 56 04  0d 04 60 0c dd f2 73 65  |.L....V...`...se|
000007e0  61 72 63 68 0d 04 6a 10  ea 20 77 6f 72 64 24 2c  |arch..j.. word$,|
000007f0  66 72 65 71 0d 04 74 39  f1 20 27 22 45 6e 74 65  |freq..t9. '"Ente|
00000800  72 20 77 6f 72 64 73 20  66 6f 72 20 66 72 65 71  |r words for freq|
00000810  75 65 6e 63 79 20 63 6f  75 6e 74 20 28 52 45 54  |uency count (RET|
00000820  55 52 4e 20 74 6f 20 65  6e 64 29 22 27 0d 04 7e  |URN to end)"'..~|
00000830  05 f5 0d 04 88 0b e8 20  77 6f 72 64 24 0d 04 92  |....... word$...|
00000840  11 e7 20 77 6f 72 64 24  20 3e 22 22 20 8c 0d 04  |.. word$ >"" ...|
00000850  9c 1e 77 6f 72 64 24 20  3d 20 a4 6c 6f 77 65 72  |..word$ = .lower|
00000860  5f 77 6f 72 64 28 77 6f  72 64 24 29 0d 04 a6 1d  |_word(word$)....|
00000870  66 72 65 71 20 3d 20 a4  77 6f 72 64 66 72 65 71  |freq = .wordfreq|
00000880  28 30 2c 77 6f 72 64 24  29 0d 04 b0 3c e7 20 66  |(0,word$)...<. f|
00000890  72 65 71 20 3d 20 30 20  8c 20 f1 20 22 57 6f 72  |req = 0 . . "Wor|
000008a0  64 20 6e 6f 74 20 66 6f  75 6e 64 22 20 8b 20 f1  |d not found" . .|
000008b0  3b 66 72 65 71 3b 20 22  20 6f 63 63 75 72 72 65  |;freq; " occurre|
000008c0  6e 63 65 73 22 0d 04 ba  05 cd 0d 04 c4 0e fd 20  |nces".......... |
000008d0  77 6f 72 64 24 3d 22 22  0d 04 ce 05 e1 0d 04 d8  |word$=""........|
000008e0  04 0d 04 e2 19 dd a4 77  6f 72 64 66 72 65 71 28  |.......wordfreq(|
000008f0  6c 6f 63 2c 77 6f 72 64  24 29 0d 04 ec 0c ea 20  |loc,word$)..... |
00000900  6c 77 6f 72 64 24 0d 04  f6 17 6c 77 6f 72 64 24  |lword$....lword$|
00000910  20 3d 20 77 6f 72 64 24  28 6c 6f 63 29 0d 05 00  | = word$(loc)...|
00000920  27 e7 20 77 6f 72 64 24  20 3d 20 6c 77 6f 72 64  |'. word$ = lword|
00000930  24 20 8c 20 3d 20 66 72  65 71 75 65 6e 63 79 28  |$ . = frequency(|
00000940  6c 6f 63 29 0d 05 0a 16  e7 20 77 6f 72 64 24 20  |loc)..... word$ |
00000950  3c 20 6c 77 6f 72 64 24  20 8c 0d 05 14 1b e7 20  |< lword$ ...... |
00000960  6c 65 66 74 62 72 61 6e  63 68 28 6c 6f 63 29 20  |leftbranch(loc) |
00000970  3d 20 30 20 8c 0d 05 1e  06 3d 30 0d 05 28 05 cc  |= 0 .....=0..(..|
00000980  0d 05 32 25 3d a4 77 6f  72 64 66 72 65 71 28 6c  |..2%=.wordfreq(l|
00000990  65 66 74 62 72 61 6e 63  68 28 6c 6f 63 29 2c 77  |eftbranch(loc),w|
000009a0  6f 72 64 24 29 0d 05 3c  05 cd 0d 05 46 05 cc 0d  |ord$)..<....F...|
000009b0  05 50 1a e7 20 72 69 67  68 74 62 72 61 6e 63 68  |.P.. rightbranch|
000009c0  28 6c 6f 63 29 3d 30 20  8c 0d 05 5a 06 3d 30 0d  |(loc)=0 ...Z.=0.|
000009d0  05 64 05 cc 0d 05 6e 26  3d a4 77 6f 72 64 66 72  |.d....n&=.wordfr|
000009e0  65 71 28 72 69 67 68 74  62 72 61 6e 63 68 28 6c  |eq(rightbranch(l|
000009f0  6f 63 29 2c 77 6f 72 64  24 29 0d 05 78 05 cd 0d  |oc),word$)..x...|
00000a00  05 82 05 cd 0d 05 8c 04  0d 05 96 10 dd f2 70 72  |..............pr|
00000a10  69 6e 74 77 6f 72 64 73  0d 05 a0 2c f1 20 27 22  |intwords...,. '"|
00000a20  50 72 69 6e 74 69 6e 67  20 77 6f 72 64 20 6c 69  |Printing word li|
00000a30  73 74 20 74 6f 20 66 69  6c 65 20 22 6f 75 74 66  |st to file "outf|
00000a40  69 6c 65 24 0d 05 aa 19  6f 75 74 66 69 6c 65 20  |ile$....outfile |
00000a50  3d 20 ae 28 6f 75 74 66  69 6c 65 24 29 0d 05 b4  |= .(outfile$)...|
00000a60  0f f2 70 72 69 6e 74 77  64 28 30 29 0d 05 be 0e  |..printwd(0)....|
00000a70  d9 20 23 6f 75 74 66 69  6c 65 0d 05 c8 20 ff 20  |. #outfile... . |
00000a80  22 53 45 54 54 59 50 45  20 22 2b 6f 75 74 66 69  |"SETTYPE "+outfi|
00000a90  6c 65 24 2b 22 20 46 46  46 22 0d 05 d2 05 e1 0d  |le$+" FFF"......|
00000aa0  05 dc 04 0d 05 e6 12 dd  f2 70 72 69 6e 74 77 64  |.........printwd|
00000ab0  28 6c 6f 63 29 0d 05 f0  08 ea 20 73 24 0d 05 fa  |(loc)..... s$...|
00000ac0  37 f4 20 52 65 63 75 72  73 69 76 65 20 72 6f 75  |7. Recursive rou|
00000ad0  74 69 6e 65 20 74 6f 20  70 72 69 6e 74 20 77 6f  |tine to print wo|
00000ae0  72 64 73 20 66 72 6f 6d  20 62 69 6e 61 72 79 20  |rds from binary |
00000af0  74 72 65 65 0d 06 04 05  f4 0d 06 0e 2d f4 20 50  |tree........-. P|
00000b00  72 69 6e 74 20 77 6f 72  64 73 20 74 6f 20 6c 65  |rint words to le|
00000b10  66 74 20 6f 66 20 63 75  72 72 65 6e 74 20 6c 6f  |ft of current lo|
00000b20  63 61 74 69 6f 6e 0d 06  18 35 e7 20 6c 65 66 74  |cation...5. left|
00000b30  62 72 61 6e 63 68 28 6c  6f 63 29 20 3e 20 30 20  |branch(loc) > 0 |
00000b40  8c 20 f2 70 72 69 6e 74  77 64 28 6c 65 66 74 62  |. .printwd(leftb|
00000b50  72 61 6e 63 68 28 6c 6f  63 29 29 0d 06 22 24 f4  |ranch(loc)).."$.|
00000b60  20 50 72 69 6e 74 20 77  6f 72 64 20 61 74 20 63  | Print word at c|
00000b70  75 72 72 65 6e 74 20 6c  6f 63 61 74 69 6f 6e 0d  |urrent location.|
00000b80  06 2c 3d 73 24 20 3d 20  a4 70 61 64 72 69 67 68  |.,=s$ = .padrigh|
00000b90  74 28 77 6f 72 64 24 28  6c 6f 63 29 2c 32 35 29  |t(word$(loc),25)|
00000ba0  2b a4 70 61 64 6c 65 66  74 28 c3 66 72 65 71 75  |+.padleft(.frequ|
00000bb0  65 6e 63 79 28 6c 6f 63  29 2c 34 29 0d 06 36 0e  |ency(loc),4)..6.|
00000bc0  f4 20 50 52 49 4e 54 20  73 24 0d 06 40 10 d5 23  |. PRINT s$..@..#|
00000bd0  6f 75 74 66 69 6c 65 2c  73 24 0d 06 4a 31 f4 20  |outfile,s$..J1. |
00000be0  50 72 69 6e 74 20 77 6f  72 64 20 74 6f 20 74 68  |Print word to th|
00000bf0  65 20 72 69 67 68 74 20  6f 66 20 63 75 72 72 65  |e right of curre|
00000c00  6e 74 20 6c 6f 63 61 74  69 6f 6e 0d 06 54 36 e7  |nt location..T6.|
00000c10  20 72 69 67 68 74 62 72  61 6e 63 68 28 6c 6f 63  | rightbranch(loc|
00000c20  29 20 3e 30 20 8c 20 f2  70 72 69 6e 74 77 64 28  |) >0 . .printwd(|
00000c30  72 69 67 68 74 62 72 61  6e 63 68 28 6c 6f 63 29  |rightbranch(loc)|
00000c40  29 0d 06 5e 05 e1 0d 06  68 04 0d 06 72 19 dd a4  |)..^....h...r...|
00000c50  70 61 64 6c 65 66 74 28  53 24 2c 6c 65 6e 67 74  |padleft(S$,lengt|
00000c60  68 25 29 0d 06 7c 3a f4  20 70 61 64 73 20 73 74  |h%)..|:. pads st|
00000c70  72 69 6e 67 20 77 69 74  68 20 6c 65 61 64 69 6e  |ring with leadin|
00000c80  67 20 62 6c 61 6e 6b 73  20 74 6f 20 6d 61 6b 65  |g blanks to make|
00000c90  20 73 69 7a 65 20 6c 65  6e 67 74 68 25 0d 06 86  | size length%...|
00000ca0  19 3d c4 6c 65 6e 67 74  68 25 2d a9 53 24 2c 22  |.=.length%-.S$,"|
00000cb0  20 22 29 2b 53 24 0d 06  90 04 0d 06 9a 1a dd a4  | ")+S$..........|
00000cc0  70 61 64 72 69 67 68 74  28 53 24 2c 6c 65 6e 67  |padright(S$,leng|
00000cd0  74 68 25 29 0d 06 a4 3b  f4 20 70 61 64 73 20 73  |th%)...;. pads s|
00000ce0  74 72 69 6e 67 20 77 69  74 68 20 74 72 61 69 6c  |tring with trail|
00000cf0  69 6e 67 20 62 6c 61 6e  6b 73 20 74 6f 20 6d 61  |ing blanks to ma|
00000d00  6b 65 20 73 69 7a 65 20  6c 65 6e 67 74 68 25 0d  |ke size length%.|
00000d10  06 ae 1b 3d 53 24 20 2b  20 c4 6c 65 6e 67 74 68  |...=S$ + .length|
00000d20  25 2d a9 53 24 2c 22 20  22 29 0d 06 b8 04 0d ff  |%-.S$," ")......|
00000d30