Home » Archimedes archive » Acorn User » AU 1997-12.adf » Regulars » StarInfo/Expound/!Expound/Expound

StarInfo/Expound/!Expound/Expound

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 » Acorn User » AU 1997-12.adf » Regulars
Filename: StarInfo/Expound/!Expound/Expound
Read OK:
File size: 10F2 bytes
Load address: 0000
Exec address: 0000
File contents
   10REM >Expound
   20ON ERROR PRINT REPORT$;" at line "+STR$ERL:END
   30
   40args$ = FNgetargs
   50PROCparse(args$)
   60PROCinit
   70
   80PROCread(file$)
   90PROCtokenise
  100
  110IF times$  <> "" times  = VALtimes$
  120IF width$  <> "" width  = VALwidth$
  130IF reduce$ <> "" reduce = EVALreduce$
  140IF word$   <> "" word   = FNtoken(word$)
  150IF word < 0 ERROR 1,"'"+word$+"' not known"
  160
  170FOR loop = 1 TO times
  180  PROCexpound(word, 1)
  190  PROCprint(nl$)
  200  IF times > 1 PROCprint(nl$)
  210NEXT
  220END
  230
  240; ***************************************
  250
  260DEF PROCexpound(word, chance)
  270LOCAL a$,sep
  280IF number(word) > 1 word += RND(number(word))-1
  290a$ = about$(word)
  300REPEAT
  310  sep = INSTR(a$ + esc$, esc$)
  320  PROCprint(LEFT$(a$, sep-1))
  330  CASE MID$(a$, sep+1 ,1) OF
  340  WHEN quote$:
  350    word  = ASCMID$(a$, sep+2, 1) - 128
  360    IF RND(1) <= chance THEN
  370      PROCexpound(word, reduce * chance)
  380    ELSE
  390      PROCprint(word$(word))
  400    ENDIF
  410    sep += 1
  420  WHEN bar$:
  430    word  = ASCMID$(a$, sep+2, 1) - 128
  440    PROCexpound(word, reduce * chance)
  450    sep += 1
  460  WHEN "n":
  470    PROCprint(nl$)
  480  ENDCASE
  490  a$ = MID$(a$, sep+2)
  500UNTIL a$ = ""
  510ENDPROC
  520
  530; ***************************************
  540
  550DEF PROCread(file$)
  560in = OPENIN(file$)
  570words = 0
  580count = -1
  590WHILE NOT EOF#in
  600
  610  line$ = GET$#in
  620  first$ = LEFT$(line$, 1)
  630  IF line$ <> "" AND first$ <>";" THEN
  640
  650    IF first$ > " " THEN
  660      IF first$ = quote$ THEN
  670        line$ = MID$(line$, 2)
  680        sep$ = quote$
  690      ELSE
  700        sep$ = " "
  710      ENDIF
  720  
  730      sep = INSTR(line$, sep$)
  740      IF sep$ = " " THEN
  750        tab = INSTR(line$, tab$)
  760        IF tab < sep sep = tab
  770      ENDIF
  780      count = words
  790    ELSE
  800      sep = 1
  810    ENDIF
  820
  830    word$(words) = LEFT$(line$, sep-1)
  840  
  850    REPEAT
  860      sep += 1
  870    UNTIL MID$(line$, sep, 1) > " "
  880  
  890    about$(words)=MID$(line$, sep)
  900    number(count)+=1
  910    words += 1
  920  ENDIF
  930 
  940ENDWHILE
  950CLOSE #in
  960ENDPROC
  970
  980DEF PROCtokenise
  990FOR i = 0 TO words - 1
 1000  line$ = about$(i)
 1010  token$ = ""
 1020  REPEAT
 1030    token$ += FNsym(line$)
 1040  UNTIL line$ = ""
 1050  about$(i) = token$
 1060NEXT
 1070ENDPROC
 1080
 1090DEF FNsym(RETURN a$)
 1100char$ = LEFT$(a$,1)
 1110a$ = MID$(a$,2)
 1130IF char$ = quote$ OR char$ = bar$ THEN
 1150  sep = INSTR(a$, char$)
 1160  sym$ = LEFT$(a$, sep-1)
 1180  sym = FNtoken(sym$)
 1190  IF sym >= 0 sym$ = esc$ + char$ + CHR$(128+sym)
 1200  a$ = MID$(a$, sep+1)
 1220ELSE
 1231  sym$ = char$
 1241ENDIF
 1251=sym$
 1260
 1270; ***************************************
 1280
 1290DEF FNtoken(w$)
 1300w = words-1
 1310REPEAT
 1320  IF w$ = word$(w) THEN =w
 1330  w -= 1
 1340UNTIL w < 0
 1350=w
 1360
 1370; ***************************************
 1380
 1390DEF PROCprint(p$)
 1400IF width = 0 w = 60 ELSE w = width
 1410IF p$ = nl$ THEN
 1420  PRINT print$
 1430  print$ = ""
 1440ELSE
 1450  print$ += p$
 1460  WHILE print$ <> "" AND LEFT$(print$, 1) <= " "
 1470    print$ = MID$(print$, 2)
 1480  ENDWHILE
 1490  WHILE LENprint$ > w
 1500    len = w
 1510    WHILE MID$(print$, len, 1) > " " AND len > 0
 1520      len -= 1
 1530    ENDWHILE
 1540    IF len = 0 THEN
 1550      WHILE MID$(print$, len, 1) > " "
 1560        len += 1
 1570      ENDWHILE
 1580    ENDIF
 1590    PRINTLEFT$(print$, len);
 1600    IF width <> 0 PRINT
 1610    print$ = MID$(print$, len+1)
 1620  ENDWHILE
 1630ENDIF
 1640ENDPROC
 1650
 1660; ***************************************
 1670
 1680DEF FNgetargs
 1690SYS "OS_GetEnv" TO env$
 1700quit = INSTR(env$,"-quit")
 1710IF quit = 0 quit = INSTR(env$,"-QUIT")
 1720env$ = MID$(env$, quit+6)
 1730spc  = INSTR(env$, " ")
 1740env$ = MID$(env$, spc+1)
 1750=env$
 1760
 1770; ***************************************
 1780
 1790DEF FNstr0(A)
 1800A$ = ""
 1810IF A <> 0 THEN
 1820  WHILE ?A<>0
 1830    A$ += CHR$?A
 1840    A += 1
 1850  ENDWHILE
 1860ENDIF
 1870=A$
 1880
 1890; ***************************************
 1900
 1910DEF PROCparse(args$)
 1920DIM buf 512
 1930IF args$="" THEN
 1940 PRINT "Sentence expander"
 1950 PRINT'"Keywords:"
 1960 PRINT'"Upper case indicates allowable abbreviation"
 1970 PRINT "-File   : Source file containing word definitions"
 1980 PRINT "-Word   : Word to expand (if not specified, first word in list is used)"
 1990 PRINT "-Times  : Number of sentences to produce"
 2000 PRINT "-Width  : Maximum width of output (or 0 for no line breaks)"
 2010 PRINT "-Reduce : Probability reduction factor (default 0.8)"
 2020 END
 2030ENDIF
 2040SYS "OS_ReadArgs", "file,word,times,width,reduce", args$, buf, 512
 2050file$  =FNstr0(buf!0)
 2060word$  =FNstr0(buf!4)
 2070times$ =FNstr0(buf!8)
 2080width$ =FNstr0(buf!12)
 2090reduce$=FNstr0(buf!16)
 2100ENDPROC
 2110
 2120; ***************************************
 2130
 2140DEF PROCinit
 2150max    = 40
 2160word   = 0
 2170times  = 1
 2180width  = 60
 2190reduce = 0.8
 2200print$ = ""
 2210DIM word$(max-1), about$(max-1), number(max-1)
 2220tab$   = CHR$9
 2230nl$    = CHR$10
 2240quote$ = CHR$34
 2250bar$   = "|"
 2260esc$   = "\"
 2270ENDPROC

� >Expound
� � � �$;" at line "+Þ:�

(args$ = �getargs
2�parse(args$)
<	�init
F
P�read(file$)
Z
�tokenise
d
n$� times$  <> "" times  = �times$
x$� width$  <> "" width  = �width$
�%� reduce$ <> "" reduce = �reduce$
�*� word$   <> "" word   = �token(word$)
�*� word < 0 � 1,"'"+word$+"' not known"
�
�� loop = 1 � times
�  �expound(word, 1)
�  �print(nl$)
�  � times > 1 �print(nl$)
��
��
�
�-; ***************************************
�
� �expound(word, chance)
� a$,sep
0� number(word) > 1 word += �(number(word))-1
"a$ = about$(word)
,�
6  sep = �a$ + esc$, esc$)
@  �print(�a$, sep-1))
J  Ȏ �a$, sep+1 ,1) �
T  � quote$:
^%    word  = ��a$, sep+2, 1) - 128
h    � �(1) <= chance �
r)      �expound(word, reduce * chance)
|	    �
�      �print(word$(word))
�	    �
�    sep += 1
�
  � bar$:
�%    word  = ��a$, sep+2, 1) - 128
�'    �expound(word, reduce * chance)
�    sep += 1
�  � "n":
�    �print(nl$)
�  �
�  a$ = �a$, sep+2)
�
� a$ = ""
��

-; ***************************************

&� �read(file$)
0in = �(file$)
:
words = 0
Dcount = -1
N
ȕ � �#in
X
b  line$ = �#in
l  first$ = �line$, 1)
v$  � line$ <> "" � first$ <>";" �
�
�    � first$ > " " �
�      � first$ = quote$ �
�        line$ = �line$, 2)
�        sep$ = quote$
�      �
�        sep$ = " "
�      �
�  
�      sep = �line$, sep$)
�      � sep$ = " " �
�        tab = �line$, tab$)
�!        � tab < sep sep = tab
      �
      count = words
	    �
       sep = 1
*	    �
4
>%    word$(words) = �line$, sep-1)
H  
R	    �
\      sep += 1
f    � �line$, sep, 1) > " "
p  
z"    about$(words)=�line$, sep)
�    number(count)+=1
�    words += 1
�  �
� 
��
�	� #in
��
�
�� �tokenise
�� i = 0 � words - 1
�  line$ = about$(i)
�  token$ = ""
�  �
    token$ += �sym(line$)
  � line$ = ""
  about$(i) = token$
$�
.�
8
B� �sym(� a$)
Lchar$ = �a$,1)
Va$ = �a$,2)
j%� char$ = quote$ � char$ = bar$ �
~  sep = �a$, char$)
�  sym$ = �a$, sep-1)
�  sym = �token(sym$)
�1  � sym >= 0 sym$ = esc$ + char$ + �(128+sym)
�  a$ = �a$, sep+1)
��
�  sym$ = char$
��
�	=sym$
�
�-; ***************************************


� �token(w$)
w = words-1
�
(  � w$ = word$(w) � =w
2  w -= 1
<� w < 0
F=w
P
Z-; ***************************************
d
n� �print(p$)
x"� width = 0 w = 60 � w = width
�� p$ = nl$ �
�  � print$
�  print$ = ""
��
�  print$ += p$
�*  ȕ print$ <> "" � �print$, 1) <= " "
�    print$ = �print$, 2)
�  �
�  ȕ �print$ > w
�    len = w
�+    ȕ �print$, len, 1) > " " � len > 0
�      len -= 1
�	    �
    � len = 0 �
#      ȕ �print$, len, 1) > " "
        len += 1
"      �
,	    �
6    �print$, len);
@    � width <> 0 �
J     print$ = �print$, len+1)
T  �
^�
h�
r
|-; ***************************************
�
�� �getargs
�ș "OS_GetEnv" � env$
�quit = �env$,"-quit")
�$� quit = 0 quit = �env$,"-QUIT")
�env$ = �env$, quit+6)
�spc  = �env$, " ")
�env$ = �env$, spc+1)
�	=env$
�
�-; ***************************************
�
�� �str0(A)
A$ = ""
� A <> 0 �
  ȕ ?A<>0
&    A$ += �?A
0    A += 1
:  �
D�
N=A$
X
b-; ***************************************
l
v� �parse(args$)
�
� buf 512
�� args$="" �
� � "Sentence expander"
� �'"Keywords:"
�4 �'"Upper case indicates allowable abbreviation"
�: � "-File   : Source file containing word definitions"
�P � "-Word   : Word to expand (if not specified, first word in list is used)"
�1 � "-Times  : Number of sentences to produce"
�D � "-Width  : Maximum width of output (or 0 for no line breaks)"
�= � "-Reduce : Probability reduction factor (default 0.8)"
� �
��
�Eș "OS_ReadArgs", "file,word,times,width,reduce", args$, buf, 512
file$  =�str0(buf!0)
word$  =�str0(buf!4)
times$ =�str0(buf!8)
 width$ =�str0(buf!12)
*reduce$=�str0(buf!16)
4�
>
H-; ***************************************
R
\� �init
fmax    = 40
pword   = 0
ztimes  = 1
�width  = 60
�reduce = 0.8
�print$ = ""
�0� word$(max-1), about$(max-1), number(max-1)
�tab$   = �9
�nl$    = �10
�quote$ = �34
�bar$   = "|"
�esc$   = "\"
��
�
00000000  0d 00 0a 0e f4 20 3e 45  78 70 6f 75 6e 64 0d 00  |..... >Expound..|
00000010  14 1d ee 20 85 20 f1 20  f6 24 3b 22 20 61 74 20  |... . . .$;" at |
00000020  6c 69 6e 65 20 22 2b c3  9e 3a e0 0d 00 1e 04 0d  |line "+..:......|
00000030  00 28 14 61 72 67 73 24  20 3d 20 a4 67 65 74 61  |.(.args$ = .geta|
00000040  72 67 73 0d 00 32 11 f2  70 61 72 73 65 28 61 72  |rgs..2..parse(ar|
00000050  67 73 24 29 0d 00 3c 09  f2 69 6e 69 74 0d 00 46  |gs$)..<..init..F|
00000060  04 0d 00 50 10 f2 72 65  61 64 28 66 69 6c 65 24  |...P..read(file$|
00000070  29 0d 00 5a 0d f2 74 6f  6b 65 6e 69 73 65 0d 00  |)..Z..tokenise..|
00000080  64 04 0d 00 6e 24 e7 20  74 69 6d 65 73 24 20 20  |d...n$. times$  |
00000090  3c 3e 20 22 22 20 74 69  6d 65 73 20 20 3d 20 bb  |<> "" times  = .|
000000a0  74 69 6d 65 73 24 0d 00  78 24 e7 20 77 69 64 74  |times$..x$. widt|
000000b0  68 24 20 20 3c 3e 20 22  22 20 77 69 64 74 68 20  |h$  <> "" width |
000000c0  20 3d 20 bb 77 69 64 74  68 24 0d 00 82 25 e7 20  | = .width$...%. |
000000d0  72 65 64 75 63 65 24 20  3c 3e 20 22 22 20 72 65  |reduce$ <> "" re|
000000e0  64 75 63 65 20 3d 20 a0  72 65 64 75 63 65 24 0d  |duce = .reduce$.|
000000f0  00 8c 2a e7 20 77 6f 72  64 24 20 20 20 3c 3e 20  |..*. word$   <> |
00000100  22 22 20 77 6f 72 64 20  20 20 3d 20 a4 74 6f 6b  |"" word   = .tok|
00000110  65 6e 28 77 6f 72 64 24  29 0d 00 96 2a e7 20 77  |en(word$)...*. w|
00000120  6f 72 64 20 3c 20 30 20  85 20 31 2c 22 27 22 2b  |ord < 0 . 1,"'"+|
00000130  77 6f 72 64 24 2b 22 27  20 6e 6f 74 20 6b 6e 6f  |word$+"' not kno|
00000140  77 6e 22 0d 00 a0 04 0d  00 aa 16 e3 20 6c 6f 6f  |wn"......... loo|
00000150  70 20 3d 20 31 20 b8 20  74 69 6d 65 73 0d 00 b4  |p = 1 . times...|
00000160  17 20 20 f2 65 78 70 6f  75 6e 64 28 77 6f 72 64  |.  .expound(word|
00000170  2c 20 31 29 0d 00 be 11  20 20 f2 70 72 69 6e 74  |, 1)....  .print|
00000180  28 6e 6c 24 29 0d 00 c8  1d 20 20 e7 20 74 69 6d  |(nl$)....  . tim|
00000190  65 73 20 3e 20 31 20 f2  70 72 69 6e 74 28 6e 6c  |es > 1 .print(nl|
000001a0  24 29 0d 00 d2 05 ed 0d  00 dc 05 e0 0d 00 e6 04  |$)..............|
000001b0  0d 00 f0 2d 3b 20 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |...-; **********|
000001c0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
000001d0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 0d 00 fa  |*************...|
000001e0  04 0d 01 04 1c dd 20 f2  65 78 70 6f 75 6e 64 28  |...... .expound(|
000001f0  77 6f 72 64 2c 20 63 68  61 6e 63 65 29 0d 01 0e  |word, chance)...|
00000200  0c ea 20 61 24 2c 73 65  70 0d 01 18 30 e7 20 6e  |.. a$,sep...0. n|
00000210  75 6d 62 65 72 28 77 6f  72 64 29 20 3e 20 31 20  |umber(word) > 1 |
00000220  77 6f 72 64 20 2b 3d 20  b3 28 6e 75 6d 62 65 72  |word += .(number|
00000230  28 77 6f 72 64 29 29 2d  31 0d 01 22 15 61 24 20  |(word))-1..".a$ |
00000240  3d 20 61 62 6f 75 74 24  28 77 6f 72 64 29 0d 01  |= about$(word)..|
00000250  2c 05 f5 0d 01 36 1d 20  20 73 65 70 20 3d 20 a7  |,....6.  sep = .|
00000260  61 24 20 2b 20 65 73 63  24 2c 20 65 73 63 24 29  |a$ + esc$, esc$)|
00000270  0d 01 40 19 20 20 f2 70  72 69 6e 74 28 c0 61 24  |..@.  .print(.a$|
00000280  2c 20 73 65 70 2d 31 29  29 0d 01 4a 19 20 20 c8  |, sep-1))..J.  .|
00000290  8e 20 c1 61 24 2c 20 73  65 70 2b 31 20 2c 31 29  |. .a$, sep+1 ,1)|
000002a0  20 ca 0d 01 54 0f 20 20  c9 20 71 75 6f 74 65 24  | ...T.  . quote$|
000002b0  3a 0d 01 5e 25 20 20 20  20 77 6f 72 64 20 20 3d  |:..^%    word  =|
000002c0  20 97 c1 61 24 2c 20 73  65 70 2b 32 2c 20 31 29  | ..a$, sep+2, 1)|
000002d0  20 2d 20 31 32 38 0d 01  68 1a 20 20 20 20 e7 20  | - 128..h.    . |
000002e0  b3 28 31 29 20 3c 3d 20  63 68 61 6e 63 65 20 8c  |.(1) <= chance .|
000002f0  0d 01 72 29 20 20 20 20  20 20 f2 65 78 70 6f 75  |..r)      .expou|
00000300  6e 64 28 77 6f 72 64 2c  20 72 65 64 75 63 65 20  |nd(word, reduce |
00000310  2a 20 63 68 61 6e 63 65  29 0d 01 7c 09 20 20 20  |* chance)..|.   |
00000320  20 cc 0d 01 86 1d 20 20  20 20 20 20 f2 70 72 69  | .....      .pri|
00000330  6e 74 28 77 6f 72 64 24  28 77 6f 72 64 29 29 0d  |nt(word$(word)).|
00000340  01 90 09 20 20 20 20 cd  0d 01 9a 10 20 20 20 20  |...    .....    |
00000350  73 65 70 20 2b 3d 20 31  0d 01 a4 0d 20 20 c9 20  |sep += 1....  . |
00000360  62 61 72 24 3a 0d 01 ae  25 20 20 20 20 77 6f 72  |bar$:...%    wor|
00000370  64 20 20 3d 20 97 c1 61  24 2c 20 73 65 70 2b 32  |d  = ..a$, sep+2|
00000380  2c 20 31 29 20 2d 20 31  32 38 0d 01 b8 27 20 20  |, 1) - 128...'  |
00000390  20 20 f2 65 78 70 6f 75  6e 64 28 77 6f 72 64 2c  |  .expound(word,|
000003a0  20 72 65 64 75 63 65 20  2a 20 63 68 61 6e 63 65  | reduce * chance|
000003b0  29 0d 01 c2 10 20 20 20  20 73 65 70 20 2b 3d 20  |)....    sep += |
000003c0  31 0d 01 cc 0c 20 20 c9  20 22 6e 22 3a 0d 01 d6  |1....  . "n":...|
000003d0  13 20 20 20 20 f2 70 72  69 6e 74 28 6e 6c 24 29  |.    .print(nl$)|
000003e0  0d 01 e0 07 20 20 cb 0d  01 ea 16 20 20 61 24 20  |....  .....  a$ |
000003f0  3d 20 c1 61 24 2c 20 73  65 70 2b 32 29 0d 01 f4  |= .a$, sep+2)...|
00000400  0d fd 20 61 24 20 3d 20  22 22 0d 01 fe 05 e1 0d  |.. a$ = ""......|
00000410  02 08 04 0d 02 12 2d 3b  20 2a 2a 2a 2a 2a 2a 2a  |......-; *******|
00000420  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
00000440  0d 02 1c 04 0d 02 26 12  dd 20 f2 72 65 61 64 28  |......&.. .read(|
00000450  66 69 6c 65 24 29 0d 02  30 11 69 6e 20 3d 20 8e  |file$)..0.in = .|
00000460  28 66 69 6c 65 24 29 0d  02 3a 0d 77 6f 72 64 73  |(file$)..:.words|
00000470  20 3d 20 30 0d 02 44 0e  63 6f 75 6e 74 20 3d 20  | = 0..D.count = |
00000480  2d 31 0d 02 4e 0d c8 95  20 ac 20 c5 23 69 6e 0d  |-1..N... . .#in.|
00000490  02 58 04 0d 02 62 12 20  20 6c 69 6e 65 24 20 3d  |.X...b.  line$ =|
000004a0  20 be 23 69 6e 0d 02 6c  19 20 20 66 69 72 73 74  | .#in..l.  first|
000004b0  24 20 3d 20 c0 6c 69 6e  65 24 2c 20 31 29 0d 02  |$ = .line$, 1)..|
000004c0  76 24 20 20 e7 20 6c 69  6e 65 24 20 3c 3e 20 22  |v$  . line$ <> "|
000004d0  22 20 80 20 66 69 72 73  74 24 20 3c 3e 22 3b 22  |" . first$ <>";"|
000004e0  20 8c 0d 02 80 04 0d 02  8a 18 20 20 20 20 e7 20  | .........    . |
000004f0  66 69 72 73 74 24 20 3e  20 22 20 22 20 8c 0d 02  |first$ > " " ...|
00000500  94 1d 20 20 20 20 20 20  e7 20 66 69 72 73 74 24  |..      . first$|
00000510  20 3d 20 71 75 6f 74 65  24 20 8c 0d 02 9e 1e 20  | = quote$ ..... |
00000520  20 20 20 20 20 20 20 6c  69 6e 65 24 20 3d 20 c1  |       line$ = .|
00000530  6c 69 6e 65 24 2c 20 32  29 0d 02 a8 19 20 20 20  |line$, 2)....   |
00000540  20 20 20 20 20 73 65 70  24 20 3d 20 71 75 6f 74  |     sep$ = quot|
00000550  65 24 0d 02 b2 0b 20 20  20 20 20 20 cc 0d 02 bc  |e$....      ....|
00000560  16 20 20 20 20 20 20 20  20 73 65 70 24 20 3d 20  |.        sep$ = |
00000570  22 20 22 0d 02 c6 0b 20  20 20 20 20 20 cd 0d 02  |" "....      ...|
00000580  d0 06 20 20 0d 02 da 1d  20 20 20 20 20 20 73 65  |..  ....      se|
00000590  70 20 3d 20 a7 6c 69 6e  65 24 2c 20 73 65 70 24  |p = .line$, sep$|
000005a0  29 0d 02 e4 18 20 20 20  20 20 20 e7 20 73 65 70  |)....      . sep|
000005b0  24 20 3d 20 22 20 22 20  8c 0d 02 ee 1f 20 20 20  |$ = " " .....   |
000005c0  20 20 20 20 20 74 61 62  20 3d 20 a7 6c 69 6e 65  |     tab = .line|
000005d0  24 2c 20 74 61 62 24 29  0d 02 f8 21 20 20 20 20  |$, tab$)...!    |
000005e0  20 20 20 20 e7 20 74 61  62 20 3c 20 73 65 70 20  |    . tab < sep |
000005f0  73 65 70 20 3d 20 74 61  62 0d 03 02 0b 20 20 20  |sep = tab....   |
00000600  20 20 20 cd 0d 03 0c 17  20 20 20 20 20 20 63 6f  |   .....      co|
00000610  75 6e 74 20 3d 20 77 6f  72 64 73 0d 03 16 09 20  |unt = words.... |
00000620  20 20 20 cc 0d 03 20 11  20 20 20 20 20 20 73 65  |   ... .      se|
00000630  70 20 3d 20 31 0d 03 2a  09 20 20 20 20 cd 0d 03  |p = 1..*.    ...|
00000640  34 04 0d 03 3e 25 20 20  20 20 77 6f 72 64 24 28  |4...>%    word$(|
00000650  77 6f 72 64 73 29 20 3d  20 c0 6c 69 6e 65 24 2c  |words) = .line$,|
00000660  20 73 65 70 2d 31 29 0d  03 48 06 20 20 0d 03 52  | sep-1)..H.  ..R|
00000670  09 20 20 20 20 f5 0d 03  5c 12 20 20 20 20 20 20  |.    ...\.      |
00000680  73 65 70 20 2b 3d 20 31  0d 03 66 1f 20 20 20 20  |sep += 1..f.    |
00000690  fd 20 c1 6c 69 6e 65 24  2c 20 73 65 70 2c 20 31  |. .line$, sep, 1|
000006a0  29 20 3e 20 22 20 22 0d  03 70 06 20 20 0d 03 7a  |) > " "..p.  ..z|
000006b0  22 20 20 20 20 61 62 6f  75 74 24 28 77 6f 72 64  |"    about$(word|
000006c0  73 29 3d c1 6c 69 6e 65  24 2c 20 73 65 70 29 0d  |s)=.line$, sep).|
000006d0  03 84 18 20 20 20 20 6e  75 6d 62 65 72 28 63 6f  |...    number(co|
000006e0  75 6e 74 29 2b 3d 31 0d  03 8e 12 20 20 20 20 77  |unt)+=1....    w|
000006f0  6f 72 64 73 20 2b 3d 20  31 0d 03 98 07 20 20 cd  |ords += 1....  .|
00000700  0d 03 a2 05 20 0d 03 ac  05 ce 0d 03 b6 09 d9 20  |.... .......... |
00000710  23 69 6e 0d 03 c0 05 e1  0d 03 ca 04 0d 03 d4 0f  |#in.............|
00000720  dd 20 f2 74 6f 6b 65 6e  69 73 65 0d 03 de 17 e3  |. .tokenise.....|
00000730  20 69 20 3d 20 30 20 b8  20 77 6f 72 64 73 20 2d  | i = 0 . words -|
00000740  20 31 0d 03 e8 17 20 20  6c 69 6e 65 24 20 3d 20  | 1....  line$ = |
00000750  61 62 6f 75 74 24 28 69  29 0d 03 f2 11 20 20 74  |about$(i)....  t|
00000760  6f 6b 65 6e 24 20 3d 20  22 22 0d 03 fc 07 20 20  |oken$ = ""....  |
00000770  f5 0d 04 06 1d 20 20 20  20 74 6f 6b 65 6e 24 20  |.....    token$ |
00000780  2b 3d 20 a4 73 79 6d 28  6c 69 6e 65 24 29 0d 04  |+= .sym(line$)..|
00000790  10 12 20 20 fd 20 6c 69  6e 65 24 20 3d 20 22 22  |..  . line$ = ""|
000007a0  0d 04 1a 18 20 20 61 62  6f 75 74 24 28 69 29 20  |....  about$(i) |
000007b0  3d 20 74 6f 6b 65 6e 24  0d 04 24 05 ed 0d 04 2e  |= token$..$.....|
000007c0  05 e1 0d 04 38 04 0d 04  42 10 dd 20 a4 73 79 6d  |....8...B.. .sym|
000007d0  28 f8 20 61 24 29 0d 04  4c 12 63 68 61 72 24 20  |(. a$)..L.char$ |
000007e0  3d 20 c0 61 24 2c 31 29  0d 04 56 0f 61 24 20 3d  |= .a$,1)..V.a$ =|
000007f0  20 c1 61 24 2c 32 29 0d  04 6a 25 e7 20 63 68 61  | .a$,2)..j%. cha|
00000800  72 24 20 3d 20 71 75 6f  74 65 24 20 84 20 63 68  |r$ = quote$ . ch|
00000810  61 72 24 20 3d 20 62 61  72 24 20 8c 0d 04 7e 17  |ar$ = bar$ ...~.|
00000820  20 20 73 65 70 20 3d 20  a7 61 24 2c 20 63 68 61  |  sep = .a$, cha|
00000830  72 24 29 0d 04 88 18 20  20 73 79 6d 24 20 3d 20  |r$)....  sym$ = |
00000840  c0 61 24 2c 20 73 65 70  2d 31 29 0d 04 9c 18 20  |.a$, sep-1).... |
00000850  20 73 79 6d 20 3d 20 a4  74 6f 6b 65 6e 28 73 79  | sym = .token(sy|
00000860  6d 24 29 0d 04 a6 31 20  20 e7 20 73 79 6d 20 3e  |m$)...1  . sym >|
00000870  3d 20 30 20 73 79 6d 24  20 3d 20 65 73 63 24 20  |= 0 sym$ = esc$ |
00000880  2b 20 63 68 61 72 24 20  2b 20 bd 28 31 32 38 2b  |+ char$ + .(128+|
00000890  73 79 6d 29 0d 04 b0 16  20 20 61 24 20 3d 20 c1  |sym)....  a$ = .|
000008a0  61 24 2c 20 73 65 70 2b  31 29 0d 04 c4 05 cc 0d  |a$, sep+1)......|
000008b0  04 cf 12 20 20 73 79 6d  24 20 3d 20 63 68 61 72  |...  sym$ = char|
000008c0  24 0d 04 d9 05 cd 0d 04  e3 09 3d 73 79 6d 24 0d  |$.........=sym$.|
000008d0  04 ec 04 0d 04 f6 2d 3b  20 2a 2a 2a 2a 2a 2a 2a  |......-; *******|
000008e0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
00000900  0d 05 00 04 0d 05 0a 10  dd 20 a4 74 6f 6b 65 6e  |......... .token|
00000910  28 77 24 29 0d 05 14 0f  77 20 3d 20 77 6f 72 64  |(w$)....w = word|
00000920  73 2d 31 0d 05 1e 05 f5  0d 05 28 1a 20 20 e7 20  |s-1.......(.  . |
00000930  77 24 20 3d 20 77 6f 72  64 24 28 77 29 20 8c 20  |w$ = word$(w) . |
00000940  3d 77 0d 05 32 0c 20 20  77 20 2d 3d 20 31 0d 05  |=w..2.  w -= 1..|
00000950  3c 0b fd 20 77 20 3c 20  30 0d 05 46 06 3d 77 0d  |<.. w < 0..F.=w.|
00000960  05 50 04 0d 05 5a 2d 3b  20 2a 2a 2a 2a 2a 2a 2a  |.P...Z-; *******|
00000970  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
00000990  0d 05 64 04 0d 05 6e 10  dd 20 f2 70 72 69 6e 74  |..d...n.. .print|
000009a0  28 70 24 29 0d 05 78 22  e7 20 77 69 64 74 68 20  |(p$)..x". width |
000009b0  3d 20 30 20 77 20 3d 20  36 30 20 8b 20 77 20 3d  |= 0 w = 60 . w =|
000009c0  20 77 69 64 74 68 0d 05  82 10 e7 20 70 24 20 3d  | width..... p$ =|
000009d0  20 6e 6c 24 20 8c 0d 05  8c 0e 20 20 f1 20 70 72  | nl$ .....  . pr|
000009e0  69 6e 74 24 0d 05 96 11  20 20 70 72 69 6e 74 24  |int$....  print$|
000009f0  20 3d 20 22 22 0d 05 a0  05 cc 0d 05 aa 12 20 20  | = "".........  |
00000a00  70 72 69 6e 74 24 20 2b  3d 20 70 24 0d 05 b4 2a  |print$ += p$...*|
00000a10  20 20 c8 95 20 70 72 69  6e 74 24 20 3c 3e 20 22  |  .. print$ <> "|
00000a20  22 20 80 20 c0 70 72 69  6e 74 24 2c 20 31 29 20  |" . .print$, 1) |
00000a30  3c 3d 20 22 20 22 0d 05  be 1c 20 20 20 20 70 72  |<= " "....    pr|
00000a40  69 6e 74 24 20 3d 20 c1  70 72 69 6e 74 24 2c 20  |int$ = .print$, |
00000a50  32 29 0d 05 c8 07 20 20  ce 0d 05 d2 14 20 20 c8  |2)....  .....  .|
00000a60  95 20 a9 70 72 69 6e 74  24 20 3e 20 77 0d 05 dc  |. .print$ > w...|
00000a70  0f 20 20 20 20 6c 65 6e  20 3d 20 77 0d 05 e6 2b  |.    len = w...+|
00000a80  20 20 20 20 c8 95 20 c1  70 72 69 6e 74 24 2c 20  |    .. .print$, |
00000a90  6c 65 6e 2c 20 31 29 20  3e 20 22 20 22 20 80 20  |len, 1) > " " . |
00000aa0  6c 65 6e 20 3e 20 30 0d  05 f0 12 20 20 20 20 20  |len > 0....     |
00000ab0  20 6c 65 6e 20 2d 3d 20  31 0d 05 fa 09 20 20 20  | len -= 1....   |
00000ac0  20 ce 0d 06 04 13 20 20  20 20 e7 20 6c 65 6e 20  | .....    . len |
00000ad0  3d 20 30 20 8c 0d 06 0e  23 20 20 20 20 20 20 c8  |= 0 ....#      .|
00000ae0  95 20 c1 70 72 69 6e 74  24 2c 20 6c 65 6e 2c 20  |. .print$, len, |
00000af0  31 29 20 3e 20 22 20 22  0d 06 18 14 20 20 20 20  |1) > " "....    |
00000b00  20 20 20 20 6c 65 6e 20  2b 3d 20 31 0d 06 22 0b  |    len += 1..".|
00000b10  20 20 20 20 20 20 ce 0d  06 2c 09 20 20 20 20 cd  |      ...,.    .|
00000b20  0d 06 36 17 20 20 20 20  f1 c0 70 72 69 6e 74 24  |..6.    ..print$|
00000b30  2c 20 6c 65 6e 29 3b 0d  06 40 16 20 20 20 20 e7  |, len);..@.    .|
00000b40  20 77 69 64 74 68 20 3c  3e 20 30 20 f1 0d 06 4a  | width <> 0 ...J|
00000b50  20 20 20 20 20 70 72 69  6e 74 24 20 3d 20 c1 70  |     print$ = .p|
00000b60  72 69 6e 74 24 2c 20 6c  65 6e 2b 31 29 0d 06 54  |rint$, len+1)..T|
00000b70  07 20 20 ce 0d 06 5e 05  cd 0d 06 68 05 e1 0d 06  |.  ...^....h....|
00000b80  72 04 0d 06 7c 2d 3b 20  2a 2a 2a 2a 2a 2a 2a 2a  |r...|-; ********|
00000b90  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
00000ba0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 0d  |***************.|
00000bb0  06 86 04 0d 06 90 0e dd  20 a4 67 65 74 61 72 67  |........ .getarg|
00000bc0  73 0d 06 9a 19 c8 99 20  22 4f 53 5f 47 65 74 45  |s...... "OS_GetE|
00000bd0  6e 76 22 20 b8 20 65 6e  76 24 0d 06 a4 19 71 75  |nv" . env$....qu|
00000be0  69 74 20 3d 20 a7 65 6e  76 24 2c 22 2d 71 75 69  |it = .env$,"-qui|
00000bf0  74 22 29 0d 06 ae 24 e7  20 71 75 69 74 20 3d 20  |t")...$. quit = |
00000c00  30 20 71 75 69 74 20 3d  20 a7 65 6e 76 24 2c 22  |0 quit = .env$,"|
00000c10  2d 51 55 49 54 22 29 0d  06 b8 19 65 6e 76 24 20  |-QUIT")....env$ |
00000c20  3d 20 c1 65 6e 76 24 2c  20 71 75 69 74 2b 36 29  |= .env$, quit+6)|
00000c30  0d 06 c2 16 73 70 63 20  20 3d 20 a7 65 6e 76 24  |....spc  = .env$|
00000c40  2c 20 22 20 22 29 0d 06  cc 18 65 6e 76 24 20 3d  |, " ")....env$ =|
00000c50  20 c1 65 6e 76 24 2c 20  73 70 63 2b 31 29 0d 06  | .env$, spc+1)..|
00000c60  d6 09 3d 65 6e 76 24 0d  06 e0 04 0d 06 ea 2d 3b  |..=env$.......-;|
00000c70  20 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  | ***************|
00000c80  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
00000c90  2a 2a 2a 2a 2a 2a 2a 2a  0d 06 f4 04 0d 06 fe 0e  |********........|
00000ca0  dd 20 a4 73 74 72 30 28  41 29 0d 07 08 0b 41 24  |. .str0(A)....A$|
00000cb0  20 3d 20 22 22 0d 07 12  0e e7 20 41 20 3c 3e 20  | = ""..... A <> |
00000cc0  30 20 8c 0d 07 1c 0e 20  20 c8 95 20 3f 41 3c 3e  |0 .....  .. ?A<>|
00000cd0  30 0d 07 26 11 20 20 20  20 41 24 20 2b 3d 20 bd  |0..&.    A$ += .|
00000ce0  3f 41 0d 07 30 0e 20 20  20 20 41 20 2b 3d 20 31  |?A..0.    A += 1|
00000cf0  0d 07 3a 07 20 20 ce 0d  07 44 05 cd 0d 07 4e 07  |..:.  ...D....N.|
00000d00  3d 41 24 0d 07 58 04 0d  07 62 2d 3b 20 2a 2a 2a  |=A$..X...b-; ***|
00000d10  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
00000d30  2a 2a 2a 2a 0d 07 6c 04  0d 07 76 13 dd 20 f2 70  |****..l...v.. .p|
00000d40  61 72 73 65 28 61 72 67  73 24 29 0d 07 80 0d de  |arse(args$).....|
00000d50  20 62 75 66 20 35 31 32  0d 07 8a 10 e7 20 61 72  | buf 512..... ar|
00000d60  67 73 24 3d 22 22 20 8c  0d 07 94 1a 20 f1 20 22  |gs$="" ..... . "|
00000d70  53 65 6e 74 65 6e 63 65  20 65 78 70 61 6e 64 65  |Sentence expande|
00000d80  72 22 0d 07 9e 12 20 f1  27 22 4b 65 79 77 6f 72  |r".... .'"Keywor|
00000d90  64 73 3a 22 0d 07 a8 34  20 f1 27 22 55 70 70 65  |ds:"...4 .'"Uppe|
00000da0  72 20 63 61 73 65 20 69  6e 64 69 63 61 74 65 73  |r case indicates|
00000db0  20 61 6c 6c 6f 77 61 62  6c 65 20 61 62 62 72 65  | allowable abbre|
00000dc0  76 69 61 74 69 6f 6e 22  0d 07 b2 3a 20 f1 20 22  |viation"...: . "|
00000dd0  2d 46 69 6c 65 20 20 20  3a 20 53 6f 75 72 63 65  |-File   : Source|
00000de0  20 66 69 6c 65 20 63 6f  6e 74 61 69 6e 69 6e 67  | file containing|
00000df0  20 77 6f 72 64 20 64 65  66 69 6e 69 74 69 6f 6e  | word definition|
00000e00  73 22 0d 07 bc 50 20 f1  20 22 2d 57 6f 72 64 20  |s"...P . "-Word |
00000e10  20 20 3a 20 57 6f 72 64  20 74 6f 20 65 78 70 61  |  : Word to expa|
00000e20  6e 64 20 28 69 66 20 6e  6f 74 20 73 70 65 63 69  |nd (if not speci|
00000e30  66 69 65 64 2c 20 66 69  72 73 74 20 77 6f 72 64  |fied, first word|
00000e40  20 69 6e 20 6c 69 73 74  20 69 73 20 75 73 65 64  | in list is used|
00000e50  29 22 0d 07 c6 31 20 f1  20 22 2d 54 69 6d 65 73  |)"...1 . "-Times|
00000e60  20 20 3a 20 4e 75 6d 62  65 72 20 6f 66 20 73 65  |  : Number of se|
00000e70  6e 74 65 6e 63 65 73 20  74 6f 20 70 72 6f 64 75  |ntences to produ|
00000e80  63 65 22 0d 07 d0 44 20  f1 20 22 2d 57 69 64 74  |ce"...D . "-Widt|
00000e90  68 20 20 3a 20 4d 61 78  69 6d 75 6d 20 77 69 64  |h  : Maximum wid|
00000ea0  74 68 20 6f 66 20 6f 75  74 70 75 74 20 28 6f 72  |th of output (or|
00000eb0  20 30 20 66 6f 72 20 6e  6f 20 6c 69 6e 65 20 62  | 0 for no line b|
00000ec0  72 65 61 6b 73 29 22 0d  07 da 3d 20 f1 20 22 2d  |reaks)"...= . "-|
00000ed0  52 65 64 75 63 65 20 3a  20 50 72 6f 62 61 62 69  |Reduce : Probabi|
00000ee0  6c 69 74 79 20 72 65 64  75 63 74 69 6f 6e 20 66  |lity reduction f|
00000ef0  61 63 74 6f 72 20 28 64  65 66 61 75 6c 74 20 30  |actor (default 0|
00000f00  2e 38 29 22 0d 07 e4 06  20 e0 0d 07 ee 05 cd 0d  |.8)".... .......|
00000f10  07 f8 45 c8 99 20 22 4f  53 5f 52 65 61 64 41 72  |..E.. "OS_ReadAr|
00000f20  67 73 22 2c 20 22 66 69  6c 65 2c 77 6f 72 64 2c  |gs", "file,word,|
00000f30  74 69 6d 65 73 2c 77 69  64 74 68 2c 72 65 64 75  |times,width,redu|
00000f40  63 65 22 2c 20 61 72 67  73 24 2c 20 62 75 66 2c  |ce", args$, buf,|
00000f50  20 35 31 32 0d 08 02 18  66 69 6c 65 24 20 20 3d  | 512....file$  =|
00000f60  a4 73 74 72 30 28 62 75  66 21 30 29 0d 08 0c 18  |.str0(buf!0)....|
00000f70  77 6f 72 64 24 20 20 3d  a4 73 74 72 30 28 62 75  |word$  =.str0(bu|
00000f80  66 21 34 29 0d 08 16 18  74 69 6d 65 73 24 20 3d  |f!4)....times$ =|
00000f90  a4 73 74 72 30 28 62 75  66 21 38 29 0d 08 20 19  |.str0(buf!8).. .|
00000fa0  77 69 64 74 68 24 20 3d  a4 73 74 72 30 28 62 75  |width$ =.str0(bu|
00000fb0  66 21 31 32 29 0d 08 2a  19 72 65 64 75 63 65 24  |f!12)..*.reduce$|
00000fc0  3d a4 73 74 72 30 28 62  75 66 21 31 36 29 0d 08  |=.str0(buf!16)..|
00000fd0  34 05 e1 0d 08 3e 04 0d  08 48 2d 3b 20 2a 2a 2a  |4....>...H-; ***|
00000fe0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
00001000  2a 2a 2a 2a 0d 08 52 04  0d 08 5c 0b dd 20 f2 69  |****..R...\.. .i|
00001010  6e 69 74 0d 08 66 0f 6d  61 78 20 20 20 20 3d 20  |nit..f.max    = |
00001020  34 30 0d 08 70 0e 77 6f  72 64 20 20 20 3d 20 30  |40..p.word   = 0|
00001030  0d 08 7a 0e 74 69 6d 65  73 20 20 3d 20 31 0d 08  |..z.times  = 1..|
00001040  84 0f 77 69 64 74 68 20  20 3d 20 36 30 0d 08 8e  |..width  = 60...|
00001050  10 72 65 64 75 63 65 20  3d 20 30 2e 38 0d 08 98  |.reduce = 0.8...|
00001060  0f 70 72 69 6e 74 24 20  3d 20 22 22 0d 08 a2 30  |.print$ = ""...0|
00001070  de 20 77 6f 72 64 24 28  6d 61 78 2d 31 29 2c 20  |. word$(max-1), |
00001080  61 62 6f 75 74 24 28 6d  61 78 2d 31 29 2c 20 6e  |about$(max-1), n|
00001090  75 6d 62 65 72 28 6d 61  78 2d 31 29 0d 08 ac 0f  |umber(max-1)....|
000010a0  74 61 62 24 20 20 20 3d  20 bd 39 0d 08 b6 10 6e  |tab$   = .9....n|
000010b0  6c 24 20 20 20 20 3d 20  bd 31 30 0d 08 c0 10 71  |l$    = .10....q|
000010c0  75 6f 74 65 24 20 3d 20  bd 33 34 0d 08 ca 10 62  |uote$ = .34....b|
000010d0  61 72 24 20 20 20 3d 20  22 7c 22 0d 08 d4 10 65  |ar$   = "|"....e|
000010e0  73 63 24 20 20 20 3d 20  22 5c 22 0d 08 de 05 e1  |sc$   = "\".....|
000010f0  0d ff                                             |..|
000010f2