File: UPDATES

package info (click to toggle)
epic 3.004-10
  • links: PTS
  • area: main
  • in suites: slink
  • size: 5,180 kB
  • ctags: 3,207
  • sloc: ansic: 40,836; makefile: 526; sh: 121; perl: 17
file content (2478 lines) | stat: -rw-r--r-- 100,619 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
EPIC3.003	[[MORE BY DEMAND]]

*** News 11/08/97 -- DCC SENDs now trigger the ON DCC_REQUEST hook.
	Same thing as with DCC GETs but for DCC SENDs. When you send
	a file to someone, the DCC_REQUEST hook will be activated.

*** News 11/04/97 -- Syntax of QUOTE command improved.
	Now the QUOTE commands can take an argument for the
	server to send data to.

		/QUOTE -server <server index number>

	This will only work if the server is connected.
	The old behavior still works.

*** News 7/14/97 -- Support for ISO2469 (mIRC) colors added.
	To toggle it ON/OFF, set the variable "DISPLAY_COLOR".
	The format is:
		^Cxx,yy

	Where xx is the foreground value (0 - 16) and yy the
	background value (0 - 16). The "," must be present if
	a background color is desired.
	Possible combinations include:
		^Cxx	- Set just foreground color.
		^C,yy	- Set just background color.
		^Cxx,yy	- Set both.
		^C	- Toggles color OFF.

	There can't be spaces between ^C and the xx|yy values or ",".
	Sematics:
		operator := [int] ["," + [int]]

	If no background color is given and "," is supplied, the comma
	will be taken as literal and displayed as part of regular text.

	Possible colors (Color Table):

	1/black 2/navy blue 3/green 4/red 5/brown 6/purple 7/orange 8/yellow
	9/birgh green 10/greyblue 11/brightblue 12/blue
	13/magenta 14/dark gray 15/gray 16 or 0/ white

	These are valid for both foreground and background colors. Any
	value exceeded than 16 will go to a lower denominator of 16.

				-- SrfRoG (srfrog@nema.com).

*** News 12/30/96 -- Support for all 26 possible user modes
	All user modes are now supported.  This should be the last
	of it until someone comes up with the bright idea of making
	uppercase modes mean different things (and ill strangle the
	bastard who does...)  I based it on the idea from sheik, but
	i took a quite different approach...

*** News 12/27/96 -- New built in command /repeat
	Up until now, /repeat has been an alias.  This has been a pain
	in the butt, because all of them either cant be used recursively,
	or theyre terribly expensive to use (or both).  So now you have
	a zero-overhead /repeat command that can be used without any
	headaches.

	There are two forms.  The old one you all know and love, and a new
	form that allows you to specify an expression in parens:

		/repeat text command(s)		(traditional form)
		/repeat (exp) command(s)	(new form)

	eg, the following two commands are equivalent:

		/repeat $var {commands}
		/repeat (var) {commands)

*** News 12/12/96 -- New command, /input_char
	/input_char is identical to /input, except that it returns after
	only one character has been pressed, instead of waiting for the
	return key to be pressed.  See the 'less' script for an example.
	/input_char has problems with /wait and /pause just like /input.

*** News 12/12/96 -- New command, /pause <X>
	If you specify an argument, the client will wait X seconds 
	before continuing.  Its kind of a mix between /wait and /sleep,
	except that this is nonblocking (unlike sleep) and doesnt send
	anything to the server (unlike wait).  It also doesnt assure
	that you wont have any race conditions (unlikes wait) and it
	will parse all incoming traffic normally (unlike sleep).

	If no argument is specfied, the client will wait for the user
	to press a key.  This kind of sort of works, but not really so
	much as i would recommend you use it unless you do so as an
	experiment as to whether it really works in the real world.  
	Maybe if you find bugs youll tell me about it? >;-)

	/pause does recursive calls to io() (much like /wait does).
	That means that it has problems if you intermix calls to /input
	while you are /pause'd, and vice versa.  Let the coder beware.

*** News 12/12/96 -- New /window option, "BEEP_ALWAYS"
	This option allows you to control whether a beep in a hidden
	window will still beep.  (Up until now, it has not.)  If this 
	is ON, then a beep in a hidden window will beep anyhow.  If
	this is OFF, then a beep in a hidden window will be silent.

*** News 12/12/96 -- /ON DCC_CONNECT/DCC_REQUEST changed

	Arguments to /ON DCC_REQUEST are now:
		$0	Nickname of other peer
		$1	The type of DCC
		$2	Filename or other information
		$3	The remote IP
		$4	The remote port
		$5	Filename	(DCC SEND only)
		$6	File Size	(DCC SEND only)

	Arguments to /ON DCC_CONNECT are now:
		$0	Nickname of the other peer
		$1	The type of DCC
		$2	The remote IP
		$3	The remote port
		$4	Filename	(DCC SEND only)
		$5	File Size	(DCC SEND only)

*** News 12/10/96 -- Virtual Hostname support
	The IRCHOST environment variable, and the /hostname (/irchost) 
	commands reflect this new support.  Supposedly it works on
	feeding, so i guess its ok.  (thanks to flarp)

*** News 12/09/96 -- Double line status bar
	/window double and its attendant features have been added.
	You can thank Archon for doing all the work =)

*** News 12/06/96 -- New status line variable
	You can now use %= in your status format to denote when
	you are a channel voice (+v).  It only goes on when you are
	+v but not also +o.  (Crowman)

*** News 11/25/96 -- New Built in function $winvisible()
	Archon pestered me enough to put this in that i did so that
	he would leave me alone. ;-)

	It takes one argument, a reference to a window.
	The return value is:
		  1	if window exists and is visible
		  0	if window exists and is hidden
		 -1	if the window does not exist (error)


EPIC3.002	[[MINOR RELEASE]]

*** News 10/29/96 -- New functionality to /timer
	You may now specify any arbitrary string (up to 10 characters)
	as the refnum for /timer.  Example:
		/timer -refnum foobar 10 echo booya booya booya boo!

*** News 10/28/96 -- New script ``fake-dcc''
	I wrote a new script to demonstrate the two features below.
	It allows the client to (at random) substitute any word out
	of a list for the word ``DCC'' in a DCC handshake.  The
	reciever, if they have the same list of words, will then be
	able to decode it using this script.

*** News 10/28/96 -- New /on, /ON SEND_TO_SERVER
	Any time anything is sent to a server, this will be hooked.  It
	takes three (or more) arguments:

		$0  - the server refnum
		$1  - the unix filedescriptor
		$2- - what is being sent

	Note that using this /on is very expensive -- expensive along the
	same lines as /on raw_irc.  So please use with discernment.
	If you hook this SILENTLY, you will inhibit the sending of the
	message to the server.  You can then use /QUOTE to send a new
	message.  Please note that use of /QUOTE in /ON SEND_TO_SERVER
	can cause an infinitely loop that will crash your client if you
	are not careful.  It is up to you to not do that.

	on ^send_to_server "% % % PRIVMSG % :$chr(1)DCC*" {
		quote PRIVMSG $4 :$chr(1)$getrandword($fake_dcc) $6-
	}


*** News 10/28/96 -- New command, /PRETEND
	The pretend command allows you to ``pretend'' that a line has come
	from the CURRENT server.  Use of this command where the current
	server is undefined results in undefined behavior.  Use of this 
	command is expensive and can lead to convoluted scripting.  You 
	(of course) can use it however you wanted, but i had in mind a way
	to fake out the client when there is no other way to get around
	some client limitation.  See the ``fake-dcc'' script for an example
	of such a case.

	on ^raw_irc "% PRIVMSG % :$chr(1)\\[$fake_dcc\\]*" {
		pretend $0 $1 $2 :$chr(1)DCC $4-
	}



EPIC3.001	[[FINAL PUBLIC RELEASE]]

*** News 10/12/96 -- Solidified syntax for /SERVER
	Now you may use either of the forms:
		server:port:password:nick
	or	server port password nick

	for the ``server'' argument(s) to /SERVER.  Of course, all fields,
	except for the ``server'' field, are optional.  If you want to
	omit a field, you will have to use the colon-seperated syntax.

*** News 10/11/96 -- New built in function 
	$uniq(... list of words ...) -- The easiest way to explain this is
	that each word in the given list is present at most once in the 
	return value.

*** News 10/04/96 -- New /set, /SET COMMENT_HACK
	Sheik wanted this to become a /set rather than a compile time option.
	Just remember to make sure this is the right setting, (It should be 
	ON usually), or your scripts could get very confused.

*** News 10/04/96 -- New /set, /SET DCC_STORE_PATH
	This setting determines what directory you want your incoming dcc's
	to be stored into.  You must have it set correctly before you 
	/dcc get, as there's no turning back after that.  Twiddles are
	expanded, there is no default (puts it into the current directory).

*** News 10/03/96 -- New command, /CALL
	The built in command "/CALL" outputs to the display the current
	script-level stack trace.  These are the commands whose execution
	is in progress.
	If the client crashes (due to a segmentation or bus fault), the
	stack trace will be displayed, as an aid to debugging.
	There must be a #define WIND_STACK in config.h (the default).
	This will show up as an 'a' in $info(o)

*** News 09/23/96 -- New built-in-functions
	Several new built in functions are available:

	$chmod([filename|fd] perm) -- given either a filename, or a file
	descriptor corresponding to a previously $open()ed file, change the
	permissions on that file to 'perm', which is an absolute octal value.
	Example:   $chmod(foobar 0700).  See the man page for 'chmod' for
	more information.

	$umask(perm) -- specfies the bits that are to be turned OFF when
	you next create a file.  This affects every file that the client
	may create during the same session, including but not limited to
	any $open()s, or /save's.  The old umask is returned, so you can 
	restore it later if you want to.  See the man page for 'umask' 
	for more information.

*** News 09/18/96 -- Information about /on send_notice
	/on send_notice is triggered any time you send a notice or a notice
	is sent on your behalf, unless such triggering would cause an infinite
	loop, in that case the /on is NOT triggered.  If you want to send a 
	notice without it ever being triggered, try /quote notice instead.

*** News 09/18/96 -- /set AUTO_REJOIN semantics fixed
	It should now rejoin in the CORRECT window instead of the current
	window.  This should make some people happy. =)

*** News 09/18/96 -- New flag to /XECHO -- "-CURRENT"
	/XECHO -CURRENT ..... sends "....." to your current window.
	Im not really sure why i told people to use this when it didnt
	exist.  *cough*.

*** News 09/17/96 -- Change to /WINDOW ADD and /WINDOW DELETE.
	James pointed out that you cant /WINDOW ADD a nick that begins
	with a caret ('^'), and that a caret is a legal n-char.
	Furthermore, /WINDOW REMOVE has existed and is the "normal"
	way to remove nicknames from the list.  Therefore, you may no
	longer remove a nick from the window's "nicklist" by prepending
	it with a caret ('^').  You must now use /WINDOW REMOVE to remove
	any nicknames.  You may now /WINDOW ADD nicks that start with a
	caret without any error messages.

*** News 09/16/96 -- New set, /SET DCC_SLIDING_WINDOW <int>
	When you are sending a file to any peer, EPIC will send
	<int> packets at the initiation and attempt to always keep
	<int> packets outstanding.  This is a simplistic implementation
	of the traditional sliding window algorithm.  There is no irc-level
	error correction:  We depend entirely on TCP to keep everything
	straight.  This should not be a problem, except over lossy networks,
	so you should have this /SET to 1 unless you are willing to take a 
	gamble!  Since packet sizes are 2k, and most OSs have socket sendq's
	ranging from 4k to 32k, you may have to tweak this /SET for optimal
	efficiency on your system (trial and error).

	This should have *NO IMPACT* on the person to whom youre sending
	the file, regardless of what client theyre using.  If you have any
	problems, it is probably a bug -- so please let me know.

*** News 09/16/96 -- Silent change to /WINDOW arguments
	At the request of kanan, /WINDOW LEVEL, /WINDOW NOTIFY_LEVEL
	and /WINDOW LASTLOG_LEVEL now do not require an argument.
	If you do not specify an argument, the current level will
	be displayed.

*** News 09/02/96 -- New feature covers up weakness in syntax
	There was a semantic ambiguity that allowed the following
	construction:
		/EVAL (...[$0])
	to crash the client due to the $0 not being expanded because
	the (...) protects expansion.  After conferring with several
	people, it appeared that no real reason exists to formally
	support aliases that begin with a left-paren.  This allows the
	use of the left-paren to be semantically bound to something 
	else, to prevent the above from crashing the client, and so the
	paren-set was made as a synonym for the @ construction:  So that
	means the following two STATEMENTS are equivalent:

		@ x = 3
		(x = 3)

*** News 08/14/96 -- Two new config.h define's.
	#define MIRC_BROKEN_DCC_RESUME turns on mIRC compatable
	/DCC RESUME feature.  It breaks the protocol, so it does
	NOT come #define'd by default -- you must turn it on yourself
	explicitly so that you take sole responsibility for it.
	This shows up as 'i' in $info(o)

	#define USE_DCC_CHECKSUM turns on DCC SEND checksumming.
	If not defined, you neither send nor honor file checksums
	that are sent from other epic clients.
	This shows up as 'v' in $info(o).

*** News 08/08/96 -- Silent change to /on send_(msg|public)
	With the changes to the send_text subsystem, if you sent a msg
	to multiple targets, it will pass all of the nicks to
	/on send_msg and /on send_public.  This is in contrast to previously,
	where it hooked them once per nick.  It is still possible for
	both to be hooked with the same message, of course.

*** News 08/07/96 -- CTCP PING now works to microsecond resolution
	More or less.  The client now sends off second + usecond
	information, and then calculates the ping time based on
	that when it comes back.

*** News 08/06/96 -- Revamped CTCP support
	Several changes have happened to the CTCP support:
	If any of these changes cause you a great deal of problems, let
	me know, and ill work something out with you.  The choices made
	here were based upon personal and public discussions i had with
	people on the epic mailing list, so your mileage may vary:

	* If you have an /encrypt set up for a target, any CTCPs you send
	  to that person will be encrypted now.  This is very useful for
	  encrypting DCC handshakes.  This is in addition to your ability
	  to send CTCPs over pre-existing DCC CHAT connections.
	* Since no known clients allow you to send more than one CTCP per
	  privmsg, and this (multiple CTCPs per privmsg) is a well known
	  mechanism for flooding,  only the first CTCP that would normally
	  be "returned" is actually returned.  All the rest are ignored.
	  CTCPs that dont "return" are not limited by this restriction.
	  The one exception to *this* is DCC.  Only one CTCP DCC will be
	  accepted per privmsg. 
	* Other internal changes have occured.  See the source code for
	  more information.  Most of the support has been rewritten.
	  Nothing else should have changed from the user point of view.

*** News 08/03/96 -- Added socks support from ircii-2.9
	ircII-2.9 has support for the 'socks' firewall library,
	and so i took that support and added it at the request
	of several people.

*** News 08/02/96 -- Implemented workaround for incompatability
	I implemented support for the gratutitous incompatability
	brought to you by the efnet 2.9 server in the JOIN command.
	It should do the "right thing" now.

*** News 07/31/96 -- Finished work on encrypted CTCPs.
	I had started support before for encrypted CTCPs.  They should
	be fully supported now, and they will be used if possible.  Note
	that this might be a problem if youre carrying on an /encrypt'd
	conversation with a non-EPIC peer and you send CTCPs.  They will
	be encrypted, and the other peer will probably not know what
	to do with them.  If anyone has a grave problem with this, let
	me know and ill work something out with you.

*** News 07/28/96 -- Striping quotation marks
	If you want to $strip() out quotation marks, you have to
	quote the quotation mark, so it isnt taken as a word
	delimiter.  People have been reporting $strip(" ....) not
	working correct as a bug, but this is _not_ a bug, because
	we need a way to be able to strip out spaces

	To strip out spaces:	       $strip(" " ....)
	To strip out quotation marks:  $strip(\\" ....)

*** News 07/27/96 -- /FEC now has same semantics as /FE
	The syntax as /FEC is now the same as the syntax for /FE.
	However, the semantics all remain the same.  An example of
	what you can now do that you couldnt do before:

	fec ($variable) a b c {echo $a $b $c}

*** News 05/14/96 -- $tdiff() no longer leaves trailing space
	If you do $tdiff(60), you no longer get that trailing space
	that was left behind:  This was (IMO) a bug, because $tdiff(59)
	did not have any trailing spaces.

*** News 05/14/96 -- Can now do /timer -delete all
	If you want to delete all your timers, you can do /timer -delete all
	and your timer list will be made very empty.

*** News 05/10/96 -- Made 'make install' less painful
	Now when you do 'make install', it will attempt to only install
	those things that really need to be installed.  Only those things
	that are newer then the installed components will actually be copied.
	This applies to all the binaries, scripts, and translation tables.

*** News 05/09/96 -- Added $mkdir() at request of CrowMan
	He asked why we had $rmdir() but not $mkdir().. and i guess
	there wasnt any particular reason.  So here it is.

*** News 05/08/96 -- Significant profiling project completed
	This marks the end of the second major profiling project
	in EPIC's history.  Some strategic modifications have been
	made in an attempt to reduce the rate at which ircII consumes
	CPU time.  Note that this does not neccesarily make EPIC
	"faster", but rather just makes it less of a hog.  Future
	performance enahancements may occur on an informal basis.

*** News 05/08/96 -- New $info() command, "O"		(crowman)
	The "O" command (short for "options") returns a string that is 
	representative of the compiled-in options for the binary.

*** News 05/04/96 -- New command, /HOSTNAME		(demon)
	At the request of DemoN, ive added the /HOSTNAME command
	that allows those with dynamic/multiple IP addresses to 
	change the address that DCC should use without having to
	restart the client.

*** News 04/28/96 -- Added encryption over dcc send/get/chat
	Its very simple.  At the end of the command line, just
	append a '-encrypt PASSWD' where PASSWD is what you want
	the dcc encrypted with.  It uses ircII's standard encryption,
	so it isnt totaly secure, but its "secure enough" for those
	who may be snooping.  Dont even *THINK* of giving me a hard 
	time for implementing this.
	   --------------------------------------------------------
	   ----- This doesnt work at the time of this release -----
	   --------------------------------------------------------
	

*** News 04/25/96 -- Added /server -add
	Now you can add a server entry w/o having to connect to it.
	Just do /server -add hostname portname password



EPIC3		[[ Hurray!  We're done! (yea.... right.) ]]

*** News 04/21/96 -- New Built-in function $glob()
	Before i begin, you can turn this off by #undef'fing 
	INCLUDE_GLOB_FUNCTION in config.h.  If your system cant compile 
	the supplied glob.c, you should #undef NEED_GLOB in config.h.  
	You'll have to try your luck with your system's glob().  If your 
	system doesnt have a working glob(), and you cant compile glob.c,
	then you must #undef INCLUDE_GLOB_FUNCTION.

	The $glob() function allows you to specify a "shell-like" 
	wildcard argument list, for which it will return all the files
	that match the patterns.  Its "supposed" to behave just like the
	shell does, so you should already know how it works.  Yes, you
	can specify more then one argument.  Directories are appended
	with a forward-slash ('/'), making it easier to seperate them
	from the regular files.


*** News 04/20/96 -- Workaround for lame ircd lossage on ``K-line comments''
	(Rant on)
	I hate these things.  Whoever allowed K-line comments to contain
	an unlimited under of words should be drawn and quartered.
	(Rant off)


*** News 04/19/96 -- Added $numsort()
	Its like $sort(), but it makes an attempt to properly order
	numbers present in the text.  The strings are alphabetically
	sorted except when numbers are placed in identicaly locations.
	So 'abc5' is located before 'abc12'.  However, 'abcX', where X 
	is any non-digit, is guaranteed to be treated as if "X" were a
	0, when comparing with 'abcY', where Y is a digit.

	Examples:
		$sort(12 1 5) 	       returns "1 5 12"
		$sort(S5 S1 S12)       returns "S1 S5 S12"
		$sort(B2 A3 C1)        returns "A3 B2 C3"
		$sort(abcd abc12 abc5) returns "abcd abc5 abc12"


*** News 04/16/96 -- No, the help bot support wasnt removed...
	I just #ifdef'd it out.  Its #define USE_HELP_BOTS. 
	Youll have to add it to the config.h to get the support.


*** News 04/12/96 -- AUTO_UNMARK_AWAY will call /away alias if possible
	Someone asked that the code that does AUTO_UNMARK_AWAY call the
	user's 'away' alias if they had one, so that scripts like superpak
	and phoenix could correctly end their msg logging.  I should have
	told the person to do an /on 306 instead. ;-)


*** News 04/11/96 -- New set, /SET DCC_LONG_PATHNAMES (ON|OFF)
	If its ON, youll see the whole pathname of the files youre sending.
	if its OFF, youll only see the last part.


*** News 04/11/96 -- More info in the status bar for DCC transfers
	As a comprimise to those who want a ncftp-ish "progress-o-meter"
	with reverse text et all, i decided to display the total number
	of packets in the file transfer and how many have been transfered
	so far, so that the percentage you see is more meaningful.
	Will this lead some day to ETC?  Perhaps.


*** News 04/10/96 -- HACKED_DCC_WARNING no longer default
	So many people have had problems with it, that i am #undef'ing
	it by default -- you are of course free to #define it if you
	like having it.


*** News 04/08/96 -- Dropped support for help bots.
	The help bots dont exist any more, so im going to take
	out the code that supports them.  Ill have to make sure
	that the help files are easily available with the release.


*** News 04/08/96 -- Added #define CONNECT_TIMEOUT to config.h
	It was silly that it was hard coded and not user-specifiable.
	I changed it to 30 seconds (it was 15 before) since 15 seconds
	hasnt seemed to cut it for me.


*** News 04/06/96 -- Same thing for /WHILE and /UNTIL
	Removed the silly restriction (see below) for /WHILE.
	The following are supported:

		/while (expr) commands
		/while (expr) {commands}

	Applies also to /UNTIL.


*** News 04/06/96 -- removed silly restriction on /IF
	The silly restriction that required you to enclose the THEN
	part of an /IF comamnd even if you didnt have an ELSE part
	has been removed.  This is not to say you cannot, but rather
	to say that you are not required to.  The /IF command can now
	be of the form(s):

		/IF (expr) commands
		/IF (expr) {commands}
		/IF (expr) {commands} {commands}

	Just so long as it appears as all one logical line in the script.
	You should use {}s for asthetic reasons if you are using more then
	one command in the THEN body.  You MUST use {}s if you have an
	ELSE part.  All this applies to /UNLESS as well.


*** News 04/06/96 -- Added /UNLESS and /UNTIL
	/UNLESS is the opposite of /IF.

		unless (x == 0) {y = 7}

	/UNTIL is the opposite of /WHILE.

		until (x == 0) {x--;y += func()}


*** News 04/01/96 -- New built in function, $notify()
	If specified with no arguments, returns the nicknames you
	have on your notify list.  It takes the following arguments:

	ON - specifies that only those who are PRESENT should be returned
	OFF - specifies that only those who are ABSENT should be returned
	SERV X - specifies that server number X should be used.
		This flag can be used without the "ON" or "OFF" arguments,
		but there isnt much point to that.  If the number argument
		is missing, the whole function returns nothing.

	In case of error (like invalid server number), the function returns 
	nothing.


*** News 03/27/96 -- $rmdir(), $unlink(), and $rename()
	They now expand twiddles, per the suggestion of Crowman.


*** News 03/20/96 -- Added 'sound' script
	The 'sound' script is an attempt on my part to support mirc's
	CTCP SOUND command.  See the script for usage info.


*** News 03/20/96 -- Fix two bugs in /exec
	The first one was a lame typo lamage that was the reason posix
	systems (freebsd, linux) were having lossage trying to kill off
	exec'd processes on quit.  That should all be kosher now

	The second one is that the signal handlers are reset right after
	the fork() in exec'd processes so that if the program being run
	coredumps, it wont output that annoying "IRC-II has trapped..."
	message back up the pipe to ircII, but will rather die the default
	death for memory faults on the system (a coredump).


*** News 03/20/96 -- New built in function -- $sort()
	Yes, I finally got off my duff and wrote this.  it requires
	qsort(3), which is required by ANSI, so i hope everyone has 
	that without my having to have 'configure' check for it...


*** News 03/20/96 -- Reworked io()
	io() no longer recreates the fd_set's every time its called,
	it doesnt call functions it doesnt need to call, and several
	other optimizations intended to reduce unnecesary CPU usage.


*** News 03/19/96 -- Fixed alias_special_char() to not call parse_inline()
	Unscientific tests show that it improves performance of simple
	variable lookups by almost 20%.

	Performance of expression mode is not effected by this change,
	but the performance of [$var] instead of 'var' goes from 50%
	slower to 30% slower.


*** News 03/19/96 -- $common() and $diff() fixed
	The following things were "broken" with $common() and $diff()

	-- If a word in the left part was found in part of a word in
	   the right part, it was wrongly returned:
	$common(one two / phone ugh)      returned "one"

	-- If a word appeared multiple times in the left part, and it
	   was present at least once in the right part, it was returned
	   multiple times:
	$common(one two one / one three)  returned "one one"

	Both of these weaknesses are now fixed.


*** News 03/18/96 -- Fixed /on bug
	Up until now, doing something like this didnt work like expected:

	/on foo "blah blah"
	{
		...
	}

	or

	/on foo "blah blah"    ....

	because the extra spaces fouled up the /ON command.  Now any spaces 
	between the pattern and the body of the ON are ignored.  This also 
	means that anyone who was doing this:

	/on foo "blah blah"   text to send to channel

	should change it to look like this:

	/on foo "blah blah" /  text to send to channel

	This seems to make a lot more sense to me...


*** News 03/18/96 -- Finished the "new and improved" ircserv.
	This new ircserv has all the functionality of the old one except
	that it actually works now, and its much simpler to both the
	client and ircserv itself.  The catch is that the client wont work
	with the old ircserv any more, and the new ircserv wont work with
	old clients.  You must install the new ircserv with this version
	of the client if you expect to use ircserv.


*** News 03/08/96 -- Support for //^ "feature"
	The //^ "feature" that is used by many large and widely used scripts
	is now supported again by popular demand.  However, you should NOT
	use this "feature" in new scripts, *please* use the syntactically
	correct ^// construct.  Thanks.


*** News 03/07/96 -- Added new command /SWITCH

	The syntax is:

	switch (control text)
	{
		(switch 1)			/*  "switch set" is an expr  */
		{				/* and some commands to      */
			body 1			/* execute if it matches the */
		}				/* control text              */

		(switch 2)			/* A switch set may have     */
		(switch 3)			/* then one expression, and  */
		{				/* if any of them match,     */
			body 2			/* then the commands are     */
		}				/* executed.                 */
	}

	The "control text" is the text that youre trying to match.
	Each "switch set" is comprised of one or more "switch texts"
	and a "switch body".  If any of the "switch texts" are found
	to match (wildcards are allowed) the control text, then the
	commands are executed.  Only the first such "switch set" found
	to match the control text is executed, the rest are ignored.
	So it is important to put your most general switches at the
	end of the structure.

	At the face of it, the general idea is that it is a way to 
	allow you to do a multi-way selection on a string when there
	are more then two possible values.  On a deeper level, there
	is also the flexibility to parse arguments using regular
	expressions and then knowing what to do depending on which
	pattern was matched.  See the "country" script for an example
	of what im talking about.


*** News 03/06/96 -- Workaround for longstanding /foreach bug
	It has been a long standing problem that you couldnt use []
	notation in the /foreach command

	So now instead of being required to do:
			/foreach foo.${ii}.${jj} kk { ... }

	You have the more asthetically appealing option of:
			/foreach foo[$ii][$jj] kk { ... }
 
	Sorry, you still cant (and never will be able to) do
			/foreach foo.$ii.$jj kk { ... }

*** News 03/06/96 -- Added new built in function $usermode()
	Hard to believe there wasnt one before.  You give it a server
	number, and it gives you your umode on that server.  If no
	argument is specified, the "current" server is used.  Specify
	an argument at your own peril, as no sanity checking is done.

*** News 03/06/96 -- Added new on, /on SILENCE
	Whenever you get a SILENCE message from the server, /ON SILENCE
	will be hooked.  It provides the following arguments:
		$0 -  a plus ('+') or a minus ('-') depending on whether this
		      message is for a silence added or removed
		$1 -  the pattern silenced or unsilenced.

*** News 03/06/96 -- Modified /alias's behavior on error.
	Well, it seemed pretty lame indeed that having trailing junk
	after the closing } in an alias would cause it to crap on the
	entire alias.  So now it just emits a warning and adds the alias
	anyhow, which is more sensible.



EPIC3pre8 [[ Bug fixes, performance tuning ]]

*** News 03/05/96 -- Added $winsize()
	If given an argument, returns the size (height) of the specified
	window.  If not given an argument, returns the size of the current
	window.

*** News 03/04/96 -- /fe now honors "extended" words correctly
	The words that are surrounded with quotation marks are now
	parsed (correctly) as one word...

*** News 02/28/96 -- /set highlight_char now accepts any string
	If the argument to /set highlight_char is not BOLD, UNDERLINE,
	or REVERSE, the argument is taken as the string to be used as
	your highlight string.

*** News 02/27/96 -- notify now queries each server
	Yes, thats right -- /notify now works on each server you
	have open independantly of each other.  Try it out. =)
	Due to logistics problems, each server has an independant
	list, but each server must have exactly the same set of
	nicknames (you cannot have a different list for each server, 
	sorry.)

*** News 02/26/96 -- Added the $strftime() function
	The $strftime() function from ircII2.8.2 has been integrated.
	The biggest change i made to it is that the first argument,
	which is an integer representing the time, is optional.  If
	no time is specified, then the "current" time is used.


*** News 02/25/96 -- Fixed horrendous ++/-- bugs.
	The ++/-- operators, that had a few non-trivial bugs before,
	have been revamped to work in all situtations.  The only catch
	is that they do not actually operate on the values until such
	time as they are parsed.  That is to say that a prefix operator
	does not reflect the new value until the operand.  A postfix
	operator is definitely reflected in tokens after the operand.

	For a contrived example, if $foobar is 3,

	(foobar++ + foobar) is (3 + 4 == 7), and *not* 6.  Also,
	(foobar + ++foobar) is (3 + 4 == 7), and *not* 8.

	Its not so hard to understand how it works, just that its hard
	to accept that it does work that way. ;-)


*** News 02/25/96 -- revamped much of next_unit (parse_inline())
	I rewrote most of next_unit() by making a few general macros
	and then writing the rest of everything in terms of the macros.
	Makes the function a lot easier to read, and allowed me to fix
	the ++/-- bugs as described above.  This shouldnt affect anything
	as i didnt actually change the code used, only how it is arranged.


*** News 02/22/96 -- New built-in function $pass()
	This function is the opposite of $strip().  You specify a list of
	characters to NOT strip out of the text, and it returns the text
	after all the characters that are not in the list are removed.


*** News 02/20/96 -- New built-in function $repeat()
	Very simple:
		$repeat(count text)
	Returns "text" repeated "count" times.  You should not assume
	any leading spaces are either retained or stripped, but you may
	assume spaces after words (including the last word) are retained.
	It doesnt put a space between each repitition -- if you need a
	space between each repetition, make sure to append a trailing space.

*** News 02/20/96 -- ansi compiling
	Please compile EPIC with ansi mode turned on if at all possible!


EPIC3pre7 [[ IS THIS THE LAST BETA RELEASE?  WE CAN ONLY HOPE! ]]

*** News 01/16/96 -- Ok. ok. the -S and -s overloaded cla were lame.
	The -s and -S command line arguments, which were overloaded to
	allow you to specify a default server have now lost that semantic.
	-s and -S now have only their classical meanings, whether or not
	to use ircserv

*** News 01/15/96 -- The semantics for $splice()
	Semantics for the heretoforth "undocumented" function $splice():

	$splice(variable start length text)

	Where "variable" is the name of a variable.
	"variable" is modified such that words "start" to "start+length"
		are replaced with the specified text.  The words removed
		are returned.  Using an absurd value for "start" or
		"length" just appends the text to the closest end.

	Assuming in all cases tha the value of $foobar is "one two three"
		$splice(foobar 0 1 booya booya)
			returns "one"
			$foobar assigned to "booya booya two three"
		$splice(foobar 5 4 ooga booya)
			returns empty string
			$foobar assigned to "one two three ooga booya"
		$splice(foobar 1 2 one)
			returns "two three"
			$foobar assigned to "one one"
	If $foobar is empty string:
		$splice(foobar 3 4 one)
			returns empty string
			$foobar assigned to "one"

	FYI, $splice() is an expensive function, but not as expensive
	as the script version was.

*** News 01/15/96 -- Added $geom()
	Returns the value of the global variables CO and LI that
	correspond to the number of columns and the number of lines,
	respectively, in the main screen for ircII.  If you have
	more then one screen open and they are of different sizes,
	then the actual value(s) returned by this function is at 
	best undefined.  If all the screens are the same size, however,
	then that size should always be returned by this function.

*** News 01/13/96 -- Added $chanmode()
	Semantics for $chanmode():

	$chanmode(#channel)

	If #channel is not specified or is an "asterisk", the current
	channel is assumed.

	This function returns the "channel mode" for the specified
	channel.  You must be on the channel to use this function.
	(See the $key() function for related semantics.)


*** News 01/13/96 -- revamped "timer" mechanism
	At the request of several people (esp. Shiek), I have rewritten
	the interface to the /timer function and written timer.c which
	contains a generic time-delayed callback mechanism.  You may use
	it in your own C code.  See the code for more information.


*** News 01/13/96 -- Silent chagne to /timer
	Support for timer refnum zero ("0") is hereby withdrawn due to
	the impossibility to portably differentiate between an explicitly 
	specified zero argument and an error returned from atoi().  More
	specifically, if you attempt to use a non-numeric value for the
	refnum option to /timer, it would implicitly be assigned the value
	of 0, which prohibited the emition of an error message since up until
	now specifying a 0 refnum was valid.  Now any attempt to use refnum
	zero is flagged as an error.

	It is possible to support the old (broken) semantics.  See the
	source code for more information.


*** News 01/07/96 -- Attempts to make $ expandoes boundless
	Up until this release, all $ expandoes have been truncated at
	a 2048 character length.  Since this has made a few people rather
	irritated due to unreliable behavior, the behavior has been changed
	so that $ expandoes are never truncated at any length.

	Testing has shown that this new method is somewhat slower for
	extremely large variables (10,000 characters and up), but this is
	not totaly unexpected since mallocing off large chunks of memory
	and strcpy()ing them around is more expensive then just whipping
	up a stack array and strcpy()ing a shorter string into it.

	For the sake of sanity, i want to point out that unless your variables
	are long enough that they were being truncated, the processing time
	for all variables is essentially zero.  Also note that this entire
	discussion applies only to the use of $ expandos and does not apply
	at all to "expression" mode where variables have never been truncated.


*** News 01/02/96 -- /dcc get nick   works multiple times.
	/dcc get nick will not issue an error about connection already being
	in progress unless all connections currently being offered from "nick"
	are actually in progress.  (Previously, you could only do /dcc get nick
	one time, no matter how many files "nick" had offered you.)


*** News 01/01/96 -- New built-in function $info()
	Semantics for $info():

	Description:  A function used to supply non-specific information
	about the actual executable image itself.

	Arguments: "COMPILE" returns information about who compiled
		   the binary in the form:
			"Compiled by <user>@<host> on <date> at <time>"

		   "SUM" returns the output from the 'sum' command when
		   run on the file 'info.c.sh' (see below).  If this value
		   is different from a previous use of the program you can
		   be insured that the binary *has* been recompiled.  Since
		   absolute protection against tampering is effectively
		   impossible, the converse can not hold.

		   More arguments are planned in the future.


*** News 01/01/96 -- Added compile logging to the Makefile
	The file "info.c.sh" is now run as a shell script and the result is
	compiled each time just before a final link is executed.  It records
	the user, host, and time the compile was done.

	If you do not want your username to be returned by the $info()
	function, you can #define ANONYMOUS_COMPILE in the config.h file.
	The username will then be "<anonymous>", but the host and time will
	be normal.


*** News 12/28/95 -- Cleaned up config.h, vars.h, vars.c
	Removed irc-vars that were not used or referenced.
	Removed #defines that were not used anywhere.


*** News 12/28/95 -- Fixed a really *stupid* bug with set_int_var
	To make a long story short, there were a few places that
	were using set_int_var() in an inappropriate manner.  Those
	have been fixed to use the (correct) function set_var_val().

	This was the cause of a few obscure bugs, which have now gone away.


*** News 12/28/95 -- A few modifications to the menus:

	* If you are in a menu, pressing the Q key kills off the menu
	  as if you had done /set -menu.

	* The <return> key now selects the current option in the menu.
	  The old behavior of <return> toggling hold mode is deprecated.

	* If you #define MENU_BOTTOM in the config.h file, then that
	  define will be used as a seperator between a menu and the rest
	  of the window.  The #define'd pattern is repeated for the width
	  of the screen.

	* Cursor keys are now supported while in menu mode.  Your cursor
	  keys must be outputing either ^[[X or ^[OX (where X is A,B,C,or D)
	  to take advantage of this (every vt-like terminal does this)


*** News 12/28/95 -- Made getting a quit message for youself not fatal
	Apparantly it *is* possible to get a quit message for youself
	in an otherwise legitimite context.  I still dont believe it is
	possible, but the bug reports are coming in.  Now it just emits
	a cryptic error message that is not fatal.


*** News 12/28/95 -- Fixed /dump on (reported by Oldpink)
	Fixed dumb bug in hook.c:flush_on_hooks() that was prohibiting
	named-hooks from being flushed (numeric hooks were being flushed
	just fine).


*** News 12/28/95 -- Fixed $connect() (reported by Chaos and others)
	The problem was that in dcc_raw_connect (what $connect()
	calls to establish the connection) i forgot to cast the
	user-specified portnum to network order, so on wrong-endian
	machines it was actually specifying a wrong port. *sigh*


*** News 12/28/95 -- Changed the behavior of alias.c:add_alias()
	The semantics of assignment have been changed slightly to support
	the removal of variables when their values would be otherwise set
	to a string with length 0 (an "empty string").  Such assignments
	this cause the variable to "go away".  This is not a problem since
	referencing a variable that "dont exist" expand to the empty string,
	so you get the same value either way.  This also affects places where
	variables are implicitly assigned (such as $shift() and $splice()).


*** News 12/28/95 -- ADVISORY -- use care with the /OPER command!
	Some advice to you opers out there...

	1) Dont put your history in a file if you use /oper nick passwd.
	   Obviously, this puts your passwd in plaintext out on the file
	   system which is a "bad idea", especially if someone is able to
	   log in as you, they can use the cursor keys to just back up in
	   your history and become oper w/o having to crack your passwd.

	2) Make sure noone is peeking over your shoulder if you do /oper nick
	   and type the passwd as "invisible text", as the person peeking
	   would be able to figure out how many characters your passwd has
	   which helps them in cracking it.


*** News 12/28/95 -- Added $crypt() from CrowMan
	Semantics for $crypt():

	$crypt(salt password)

	You give it a salt (a two letter combination) and a plaintext
	and it returns an encrypted string.  This just calls the C library
	function $crypt(), so if you dont have it, this wont do you any good.


*** News 12/28/95 -- Added $fexist() and $fsize() from Sheik
	Semantics for $fexist() and $fsize():

	$fexist(filename)	returns 1 if file exists, -1 if not.
	$fsize(filename)	returns size of file, -1 if file not exist.


*** News 12/28/95 -- Added new key binding, DELETE_TO_PREVIOUS_SPACE
	Keybinding deletes characters backwards until if finds a space.
	Note that if the character to the left is a space, it wont delete
	anything.



EPIC3pre6 [[ LAST MINUTE BUG FIXES/ADDITIONS ]]

*** News 12/3/95 -- New built in function $aliasctl()
	Semantics for $aliasctl():

	Description:  A function that allows for low-level manipulation
	of the alias and variable lists.  It takes three or more arguments:

	The first argument is the string "ALIAS" or "ASSIGN"
	The second argument is one of the options "GET", "SET", or "MATCH"
	The third argument is the alias/assign you are operating on.
		If the operation is "MATCH" and this argument is
		an asterisk ('*'), then it will match all top-level
		alias/assigns.
	The rest of the arguments are used if you are doing a SET.

	More operations may be added in the future.

	"GET" returns the value of an alias/assign.
	"SET" sets the value of an alias/assign.
	"MATCH" returns a word-list of all aliases/assigns that begin
		with the specified argument.  "MATCH" does not descend
		into arrays or subarrays:  "MATCH" does not accept wildcards,
		but does accept the special argument "*" which returns all
		first-level alias/assigns.

	contrived examples:
	$aliasctl(ASSIGN GET foo)	returns the value of $foo
	$aliasctl(ASSIGN SET foo 3)	same as @ foo = 3
	$aliasctl(ALIAS GET join)	returns the "stuff" for /join
	$aliasctl(ALIAS SET join window join)
					same as /alias join window join
	$aliasctl(ASSIGN MATCH *)	Returns all top-level assigns.
					Does not return any arrays.
	$aliasctl(ALIAS MATCH w)	Returns list of all aliases
					that start with 'w'
	$aliasctl(ALIAS MATCH tk)	Returns list of all aliases that
					begin with 'tk'
	$aliasctl(ALIAS MATCH tk.)	Returns list of all aliases in
					the array "tk"


*** News 12/3/95 -- New built in functions $numwords() and $strlen()
	$numwords() returns the number of words in the given text.
	$strlen() returns the number of characters in the given text.

	Text with all whitespace characters has zero (0) words.
	$numwords() does not recognize "extended words".

	Use @var or #var when possible, as they are more efficient.


*** News 12/2/95 -- /FOREACH can work on command aliases
	If the named argument to /FOREACH begins with a hyphen ('-')
	then iteration will occur over the array of command aliases
	specified (as opposed to assign aliases)


*** News 12/1/95 -- /WINDOW size added
	You can specify the absolute height of a window by using the 
	/window size <height> operation.  If the specified size is 
	inappropriate, the client will whine at you.


*** News 12/1/95 -- /LASTLOG displays ANSI codes if #define MURPLE
	If you #define MURPLE in your config.h, /LASTLOG will turn on 
	DISPLAY_ANSI during its execution and turn it back to whatever 
	you had it set to when its done.  If murple likes it, i might 
	make it the default.


*** News 12/1/95 -- New functions $winserv(), $lastserver(), $servername()
	These functions return -1 on error (ie, on illegal value)


	$winserv() or $winserv(0)	returns the server index for current
					window.
	$winserv(winrefnum)		returns the server index for that
					window.

	$lastserver()			returns the server index for the last
					server we parsed.  Useful with:

	$servername(servrefnum)		returns the name of the specified
					server.


*** News 12/1/95 -- DISPLAY_ANSI var only lets escapes through
	The only ANSI character that is valid and less then 32
	is the escape character (27).  So if DISPLAY_ANSI is
	on, we let it though but reverse all the rest (like say,
	the XON/XOFF characters, and ^R and ^T. >;-)


*** News 12/1/95 -- LASTLOG level "ALL" includes USERLOG levels
	You get the idea.


*** News 12/1/95 -- $-0 silent change
	I think i can explain it best by an example:

	For the args "  1  2  3  4", $-1 on the stock client is "  1  2"
	but for the string $-0, the stock client does "1".  This is
	inconsistent:  It should never strip the leading spaces on $-n.
	So i fixed it so that $-0 is "  1" instead of "1".


*** News 12/1/95 -- /set BEEP off really *means* off
	You wont get beeped *at all* if you have BEEP set to off.
	Really.



EPIC3pre5  [[[ FINAL BETA RELEASE! ]]]

*** News 11/27/95 -- New built-in function $writeb()
	The function $writeb() is exactly the same as $write(),
	except it does not append a trailing newline.


*** News 11/27/95 -- New functionality to $read()
	Expanded semantics for $read():

	$read(fd bytes)		-- returns the next "bytes" bytes from
				   the $open()ed file.  It is guaranteed
				   that many bytes will be read and returned
				   unless end-of-file occurs.


*** News 11/27/95 -- Added support for NOTEs
	Added support for undernet-style NOTEs.
	Incoming NOTEs look like this:

		[nickname] message (time)

	where "nickname" is the person who sent the nick,
	"message" is the message, and "(time)" is the time that the
	message was sent, if and only if the message was sent more than
	one minute ago.  If (time) is absent, the message was just sent.


	/ON NOTE supplies the following arguments:
	$0   nickname of the sender
	$1   The time the note was sent -- this field is only
	     accurate up to plus or minus 60 seconds, so just understand
	     that you cant trust the seconds to be accurate.
	$2-  The message


	/IGNOREing NOTEs now works.


*** News 11/23/95 -- Sanity for /STACK
	People commented that if you attemped to /stack push on XXX,
	and there were no /on XXXs present, that an empty "placeholder"
	should be placed on the stack, so that when /stack pop on XXX
	is executed, the /on XXXs should be cleared, instead of not
	clearing them and emitting an error message (agreed, fixed.)


*** News 11/23/95 -- Support for long nicknames
	#define ALLOW_LONG_NICKNAMES if you want support for 30 
	character nicknames.  Dont define it if you dont use any
	servers that support long nicknames.  (Default is undef)


*** News 11/23/95 -- Closed up tty bug
	Sometimes, characters with the high bit set were being sneaked into
	the client even if the client asked the terminal handler to strip
	off the high bit.  Now the client just goes ahead and strips off
	the high bit itself if 8 bit characters are turned off.  This fixes
	the bug when people would send XOFF characters with the high bit
	set and that would get passed to the terminal, which ignores the high
	bit, and turns off the person's flow control -> bad. (chaos)


*** News 11/23/95 -- Support for CS servers
	Support for user modes +c, +f, +k, +r, and +u have been added.



EPIC3pre4

*** News September/October/November - lots of bug fixes
	So im lame.  I didnt add any new features, just fixed bugs as
	they popped up.



EPIC3pre3.3

*** News 09/30/95 -- Added a feature to deny a specific host
	In some schools that have networked systems (ie, under AFS),
	the same executable may be run by any nmber of people on any
	number of machines.  For these people, there is now a config.h
	#define that allows you to set a file that will be checked for
	hosts to deny access to the executable.



EPIC3pre3

*** News 09/09/95 -- Got rid of stupid 'count' program!
	Converted *.h.proto files to use 'enum' instead of that stupid
	'count' program.  EPIC no longer requires (f)lex to compile.


*** News 07/31/95 -- major rewrite of built-in functions and regression test
	I rewrote most of the built-in functions to fix all of the remaining
	bugs that were present.  I also whipped up a script to test a lot of
	functions to make sure that in the future, ill know right away when
	a function isnt working right.


*** News 07/06/95 -- DCC TALK and DCC SUMMON removed
	In a move that is likely to be a little controversial, i removed
	the DCC TALK and DCC SUMMON features because they seemed to be
	 1) redundant
	 2) not implemented very well
	And also because we want to make EPIC smaller by ridding it of
	extraneous unused features.


*** News 07/03/95 -- Userhost now taken on advice of the server
	At the suggestion of DemoN, the client now asks the server what
	it thinks our userhost is when we have connected to it, and we
	take it at its word.  In this way, we no longer have DCC conflicts
	when we think our IP address is one thing and the rest of the
	world thinks its another...



EPIC3pre2

*** News 06/23/95 -- /on timer actually hooks at the top of each minute
	/on TIMER actually hooks when the minute rolls around instead
	of "up to" 15 seconds after the minute.  Another aspect of this
	is that EPIC doesnt do 4 select() calls a minute when youre
	idle, it only does one, which lowers the CPU usage.


*** News 06/14/95 -- DCC Transfers now measured to microsecond precision
	If your system has gettimeofday() (its a BSDish syscall) EPIC
	will report your DCC transfer rates in terms of second/usecond
	resolution -- providing a better representation of the kb/sec
	for small, fast transfers.  Anyone want to tell me what/if there
	is a posix or sysv call to get second/usecond info?



EPIC3pre1	(size level 123%)

*** News 05/21/95 Highlight characters may now be bound (keys.c, edit.c)
	You may bind any sequence you wish to BOLD, UNDERLINE, REVERSE,
	or HIGHLIGHT_OFF.  However, please note that no matter what key
	you have bound to them, BOLD will always insert a ^B into your
	input line, UNDERLINE inserts ^_, etc, etc, etc.  Yes. i know this
	can be confusing, but unless someone comes up with a big gripe,
	im most likely going to leave it this way.  The highlight keys come
	bound to the highlight bindings that they should be bound to by
	default. >;-)


*** News 05/21/95 /set INDENT should work properly with ascii sequences
							(screen.c)
	Or so i think.  Let me know if you dont think it works properly.


*** News 05/20/95 # walls incorrectly hooked		(parse.c)
	# walls (ie, walls sent to a hostname pattern) were incorrectly
	hooked as PUBLIC_MSGs instead of MSG_GROUP.  Fixed.


*** News 05/20/95 choices for help now paged		(help.c)
	When you are given a list of choices to select from in the help
	browser (ie, in /help set), the options are paged if you have
	HELP_PAGER set.


*** News 05/17/95 built-in aliases now binary searched  (alias.c)
	The built in aliases (all 101 of them) are now binary searched
	instead of sequentially searched.  This should make the use of
	built in aliases all that much faster, as well as increasing
	the speed of your own aliases since the entire builtin alias
	list will not have to be traversed before your aliases are
	searched.


*** News 05/17/95 Complete rewrite of main loop		(irc.c, others)
	irc_io has been replaced (modularized, actually).  Hopefully
	this will make ircII more reliable and less prone to lock ups.
	The first thing you will probably notice is that the client
	still accepts input from the keyboard even during a /wait
	command.  Preliminary tests show this new design to be more
	sturdy then irc_io ever hoped to be.


*** News 05/11/95 Completed rewrite of ignore		(ignore.c, whois.c)
	The rewrite of the ignore system has been completed.  Ignores are
	now officially based on *!*@* patterns instead of nickname or
	userhost patterns.


*** News 05/11/95 Key bindings are now allocated dynamically (keys.c)
	Up until now, the key maps have been stored in static arrays, 10 maps 
	of 256 characters for a total of 2560 entries at 13 bytes per entry. 
	(2 integers a pointer and a char) for a usage of 33,280 bytes (32K). 
	That has been dropped down to 2560 pointers (10,240 bytes) with 13 
	bytes still used for each key binding, a savings of 23,040 bytes 
	(22k) in overhead.  You would have to have over 1,770 key bindings 
	before you will use as much RAM under this new system as you did under 
	the old system.


*** News 05/11/95 Client no longer needs the 002 numeric (notice.c)
	Some people, who hacked the 002 numeric reply on their server, broke 
	all the ircII clients out there that rely on the 002 numeric being of 
	a specific format to extract the server name and version info.  This 
	is totaly ludicrous to me, since that is what the 004 numeric is there
	for, (to provide server and version info.)  So the .ircrc is not 
	loaded until the 004 numeric is recieved now.  The ``kludge'' that 
	ircd has for older ircII clients is ignored if you recieve the 001 
	numeric (which signifies a 2.8 class server).  If you do not recieve 
	a 001 numeric, then the server waits until the kludge is recieved to 
	load the .ircrc, as it has always done for ever and a day.


*** News 05/09/95 Removal of support for 2.5/2.6 (all)
	Per the vote taken on the mailing list, all support for ircd2.5 
	and ircd2.6 has been terminated.  Please do not use EPIC on those 
	servers.  (This should not be a problem since there hasnt been a 
	ircd2.6 server in over three years)  I have ripped out large chunks
	of code that were specific to ircd2.5 and 2.6, and which were 
	confusing the whole code and making things harder then they had to 
	be.  Also, code that is specific to ircd2.7 servers has been 
	#ifdef'd out by default, you can get that code by #define COMPAT_27 
	in the config.h.  If you dont need ircd2.7 compatability, you will 
	save some amount of space in your executable.


*** News 05/06/95 new command /MESG		(output.c)
	The new command 'MESG' now does what its counterpart in unix does:
	It allows or disallows writes to your screen:  If you set it to 'n',
	you will not recieve any talk requests or writes from other users 
	directly onto your screen.  If you set it to 'y', you will be able 
	to recieve talk requests and writes from other users.  THIS DOES NOT
	RESET THE PREVIOUS STATE WHEN YOU EXIT!  If you use 'MESG' to set
	permissions on your tty, those permissions will still be set after
	you exit.


*** News 05/06/95 new function $trunc		(alias.c)
	A new function $trunc() is available for rounding or truncating 
	floating point numbers.  It takes two arguments, the first is the 
	precision and the second is the number.  If the first argument is 
	positive, that is taken as the number of decimal places to round at.
	If the first argument is negative, that is taken as the number of 
	significant digits to round at.  The answer will never have more 
	precision then what you provide.  This function uses the system call 
	printf() to format the output, so your actual output is dependant 
	upon your system's implementation of printf().  If you provide strange
	input (ie, something that isnt a number) you will probably get strange
	output. (garbage in, garbage out)


*** News 05/06/95 DCC reject			(dcc.c ctcp.c)
	If you use the /DCC CLOSE command to close an offered or pending DCC 
	connection, it will send a CTCP notice to the other peer telling them 
	that the transaction will not occur.  Both peers will then remove the 
	offer from their respective DCC lists.  Either peer (either the sender 
	or the reciever) may reject the connection by using /DCC CLOSE and the 
	other peer will be notified.  If the other peer is an older client, 
	they may not handle the CTCP notice gracefully.  A script is provided
	with the client to supply this functionality to older clients.


*** News 05/06/95 DCC Warning before overwriting file (dcc.c)
	If you recieve a dcc send request for a file that already exists, you 
	will get a warning to that effect, advising you to use /DCC RENAME if 
	you dont want to overwrite the original file.


*** News 05/06/95 DCC Progress-o-meter		(dcc.c, etc)
	New status format variable: %D -- shows the progress of the current 
	DCC send/get transfer showing the nickname and percent of transfer 
	completed.  /DCC LIST now shows the size of the file and the 
	percentage transfered instead of simply showing the number of bytes 
	sent.


*** News 05/01/95 Floating point support	(alias.c)
	There *IS* floating point support.  However, it is preliminary and 
	may not neccesarily be complete or manageable!  In all cases where 
	integers are needed, any floating point values will be truncated to 
	the next lowest integer (or to the next higher integer if youre 
	talking about a negative value)

	You have to /set FLOATING_POINT_MATH to 1 before you will get any 
	floating point answers.  This is to maintain backwards compatability 
	with old scripts until i have a chance to assess the damage that 
	would result in older scripts that assume integer math.

	Also note that no matter what FLOATING_POINT_MATH is set to, floating 
	point math will be done on the operands.  if it is set to OFF, the 
	result will then be truncated after the operation.  So any script that 
	did something like 8 - 3.2 will get the answer '4' instead of the '5' 
	that previously would have been given.

	Please keep in mind that ircII parses its algebraic expressions from 
	right to left (this is a bug im working on, so dont harass me yet), 
	so if you try to do floating point math, please be aware that you may 
	have to use paranthesis to get the right parsing order.


*** News 04/28/95: More security
	A new /set, "SECURITY" is in place to allow you to do some primitive 
	backdoor security.  If you set it to 1, you cannot use a variable as 
	a command.  If you set it to 2, you cannot use /exec except 
	interactively.  If you set it to 4, you cannot use the /set command 
	except interactively.  You can add these numbers up to suit the 
	security you wish to have.




****************************************************************************
EPIC2		[[[ PUBLIC RELEASED VERSION! ]]]

*** News 04/09/95: ~ operator had wrong precedence (alias.c)
	The ~ operator had the wrong precedence.  Its now been fixed.

*** News 04/08/95: $open() now expands twiddles (files.c)
	Kev asked me to have the $open() call expand_twiddle so
	you can do ~/filenam type stuff.

*** News 04/08/95: New functions added		(alias.c)
	The following functions, which act simply as front ends
	to the system calls by the same name have been added:

	$unlink(file1 [file2 ...])	Delete a list of files
	$rename(file1 file2)		Rename file1 to file2
	$rmdir(file1 [file2 ...])	Delete a list of directories

	These functions return the number of files that were not
	successfully handled.  So, it returns 0 if all went well or
	if no arguments were specified.

	These functions wont do anything the system call wont do, ie,
	theyre rather primative.  Use /exec for more complex tasks.
	These functions do NOT do any wildcard expansion!

*** News 04/08/95: EMACS keybindings no longer bound by default (keys.c)
	Someone from Europe said that using EPIC on scandinavean
	keyboards was difficult at best becuase of the emacs metakey
	bindings that i doubt anyone uses anyhow.  You can #define
	EMACS_KEYBINDS if you want them, or just /bind them in 
	your .ircrc

*** News 04/05/95: Nickname not fudged in /nick (numbers.c, etc)
	Kanan asked that the /nick command not fudge your nick
	if you enter an invalid nickname.

*** News 04/03/95: Fixed brain dead ignore	(ignore.c)
	Many, many people have asked why /ignore cannot support
	the nick!user@host construct.  Well, now it can.  In fact,
	you can give it any non-ambiguous nick!user@host pattern
	and it will recognize it and do the right thing.  A userhost
	*must* contain either a "@" or a "."  Any string with no
	"!"s, "@"s, or "."s is assumed to be a nickname.

	Also, the /ignore command stores ignores as nick!user@host
	patterns now instead of as a "nick" or a "userhost" -- this
	is backwards compatable becuase you can think of what used
	to be stored as "nick" is now "nick!*@*" and what used to 
	be stored as "user@host" is now "*!user@host" -- ok?

*** News 04/03/95: Finished implmenting /stack	(stack.c)
	/stack (PUSH|POP) (ASSIGN|ALIAS|ON) now works.
	/stack LIST isnt implemented yet.  Will come in future version.



EPIC2pre5 [[[ FINAL BETA RELEASE! ]]]

*** News 04/02/95: Modified 'LOAD' command	(edit.c)
	You may now specify any number of filenames per LOAD command.
	Not only will this allow you to tighten up your scripts by
	loading many files per LOAD command, but also allows you to
	stub several files to one alias (see below) -- of course,
	if you use the -args flag, you may not specify more then
	one file after the flag to load.  The -args flag has effect
	only on the one filename that follows it. (see help files)


*** News 04/02/95: New command "STUB"		(alias.c edit.c)
		*** NOTE: The use of the word 'alias' can also be
			extended to the word 'assign' as well.

	You may now "stub" an alias to a file.  What this means is 
	that the first time you attempt to use that alias, the file 
	it is stubbed to will be loaded.  Therefore, if the alias 
	is never used, the file it is contained in will never be 
	loaded (Obviously, if another alias that is stubbed to the 
	same file is used, all aliases in that file will also be 
	unstubbed.)  The idea is that instead of loading a very 
	large script pack on boot up, you can create a file that 
	will contain "stubs" to the real files those aliases are in. 
	If/when you actually use those aliases, at that time will the
	file be loaded, so you dont have to load everything every time
	if you dont use everything every time. >;-)

	Stubs *are* aliases.  The /STUB command is used only to enter
	stubs.  Once they are entered, you can (and must) list or 
	delete list them using the /ALIAS command just as if it were 
	a normal alias.

	Probably I (or someone who is interested) should write a C
	program, or maybe even a perl program that will automatically
	generate stub programs for multi-file script packs.


*** News 03/31/95: Implemented CTCP over DCC	(ctcp.c, dcc.c, etc)
	You are now allowed to send CTCP commands over an open
	DCC CHAT connection by using the form =nickname, just like
	you do for /msg =nick.  This buys you three things:

	* On a really really bad day, you can send files to a person 
	  you are dcc chatting with without having to be at the mercy 
	  of a certain d0g3-st()()p1d server that lags a lot.

	* If you dont want to tell the whole net that youre sending 
	  a file to someone, this allows only you and your target to 
	  see the handshake.

	* Since all CTCP commands can be sent this way, its just another
	  way to reduce network traffic, making life better for everyone.


*** News 03/28/95: Fixed the STACK command 	(stack.c)
	STACK POP ON XXX now works correctly. huzzah!



EPIC2pre4

*** News 03/27/95: Bug fix for umode +o		(parse.c)
	Doh! Cant pass a null pointer to do_hook.... 


*** News 03/27/95: New privacy feature		(config.h, irc.c)
	As detailed in the config.h, there is a new privacy feature
	in ircII.  You are now able to define at compile time, or, 
	to specify a file containing at run time, user ids in integer
	form, that will be authorized to run the program.  Unauthorized
	users will be "spoofed" -- that is, ircII will execute another
	program (that you may also define) without giving any clues.
	You may also specify a password that will be used in conjunction
	with uid checking.

	You can also define a second file that will be used to specify
	the uids of those users who will NOT be allowed to use the
	program *at all*

	See the config.h for a full explanation of the feature.


*** News 03/26/95: Fixed bug with ${} expando	(alias.c)
	The ${} expando (that allows you to switch to the expression
	context from within the command context) didnt allow nesting
	before.  I consider this a bug, so i fixed it.
	(ie, ${[${foo}bar]} now is the variable $foo followed
		by the string 'bar'.  Nesting ${}s usually is done
		when you are using the tertiary operator)
 

EPIC2pre3.1

*** News 03/23/95: new /set: DISPLAY_ANSI
	At the request of Deadelvis, i included a new /set that will allow
	you to display ANSI characters as is without their being fudged 
	by the client into reverse characters.  It is off by default.

	*** *** *** WARNING! *** *** *** WARNING! *** *** ***
	If you run the client with this set to ON, you run the risk of
	keybombs/whatnot! 
	*** *** *** *** *** *** *** *** *** *** *** *** *** ***

	My advice is to do something like this:
	alias real_echo {set DISPLAY_ANSI ON;eval echo $*;set DISPLAY_ANSI OFF}

	then use /real_echo to display things with ansi characters.

*** News 03/23/95: Unexpected EOF message more informative
	the "Unexpected EOF in file ..." error message will now attempt
	to tell you what line the beginning { started at.  Its not
	guaranteed to get the right one, but it will get the first unmatched
	{ correct. ;-) (deadelvis)

*** News 03/23/95: /ignore MSG no longer ignores CTCPs
	At the request of DeadelviS, /ignore ... MSG no longer ignores
	CTCPs. you have to /ignore ... MSG CTCP now.  Unless someone has
	a dire problem with this, i will keep it this way.  If you have
	a dire problem with it, let me know, and ill work something out
	with you.

*** News 03/23/95: wait % functionality restored
	Flav alerted me to the fact that wait % was a noop.  I put back
	its functionality.  Dont ask me why phone took it out in the first
	place.  Whee.


EPIC2pre3 (2.8 compliant)

*** News 03/19/95: finished prototyping
	Most (all?) the header files are now prototyped.

*** News 03/18/95: new config.h define, "EXEC_COMMAND"
	At the request of DemoN, i have included a define in config.h
	that will allow you to remove the EXEC command at compile time.
	If you remove the EXEC command, it cannot be used unless you
	recompile the client again.  If you do not define EXEC_COMMAND,
	you cannot use the file manipulation functions either.  This
	is "supposed" to be a security feature. >;-)

*** News 03/17/95: New /set: AUTO_NEW_NICK
	If the server rejects you for a nickname collision, and
	you have AUTO_NEW_NICK set to ON, the client will convolute
	your nickname in an attempt to get a nickname suitable for
	reconnecting.  It has a pretty good idea when its out of
	guesses, and if that happens, it will fall back and ask
	you for a new nickname.  If AUTO_NEW_NICK is off, the client
	will always ask you for a new nickname if you are collided.

*** News 03/17/95: New function 	(alias.c notice.c server.h)
	New function:

	$version([servernumber]) - returns in text form the "class"
		of server specified.  The servernumber should be
		a number corresponding to a server in your server list
		TO WHICH YOU ARE OR ALREADY HAVE BEEN CONNECTED!!
		Specifying no arguments implies your current server.

		The classes are such:

			"2.5"		a 2.5 server
			"2.6"		a 2.6 server
			"2.7"		a 2.7 server
			"2.8"		a regular 2.8 server
			"u2.8"		an undernet 2.8 server (mu/me)
			"2.9"		a regular 2.9 server
			"u2.9"		an undernet 2.9 server
			"2.10"		a regular 2.10 server
			"u3.0"		an undernet 3.0 server
	
	Please dont get confused if you get the reply "u2.8" from
	a server on efnet:  All that is meant to convey is that the
	server has the capability to handle the extended undernet
	numerics and replies.

	If you ask for the version of a server to which you have not
	been connected, "2.5" will be returned (becuase it is the
	lowest common denominator)
	

*** News 03/16/95: EPIC finally loads 100% of ircII2.2.9 scripts
	Thanks to the prodding of Kanan and Murple, i tracked down
	the reason EPIC wouldnt load old script packs.  It was in
	edit.c in the loader, the part that handled comments was
	munging up lines that it shouldnt have been.  I am now able 
	to load textbox, axis, and phoenix without any apparant 
	problems.  (mixed blessing)  This is the most fundamental
	bug that i have fixed, so it is worth upgrading for.

*** News 03/16/95: character translation function
	New function:

	$tr(/oldc/newc/text) - Substitutes any instances of characters
		in 'oldc' with corresponding character in 'newc' in
		'text'.  If 'oldc' is longer then 'newc', then the last
		character in 'newc' will be used to extend 'newc' to the
		length of 'oldc'  Delim is the first character, does not 
		have to be '/'.  Examples:

	$tr(/a/b/Mary had a little lamb) returns "Mbry hbd b little lbmb"
	$tr(?a??Mary had a little lamb) returns "Mry hd  little lmb"
	$tr(:abcdefghijklmnopqrstuvqxyz:nopqrstuvwxyzabcdefghijklm:$*)
		would do a "rot-13" on the text passed to the alias.
	$tr(/$chr($jot($ascii(a) $ascii(z)))/
	     $chr($jot($ascii(n) $ascii(z)))$chr($jot($ascii(a) $ascii(m)))/$*)
		Does the same thing as above.


EPIC2pre2 (2.8 compliant)

*** News 03/14/95: New IP/name conversion functions
	Added three new functions:

	$iptoname(ip-addr) given a XXX.XXX.XXX.XXX ip address, returns the 
		hostname associated with that IP
	$nametoip(hostname) given a hostname, returns the XXX.XXX.XXX.XXX 
		ip address associated with that host.
	$convert(whatever) converts whatever you give it to whatever it isnt.
		$convert($convert(rush.cc.edu)) should return "rush.cc.edu"


*** News 03/13/95: file reading/writing by popular request
	You now have the capability to manipulate files directly in
	irc using several built in functions.

		$open(FILENAME <type>) where <type> is R or W depending
			on whether you want to Read or Write.  Write does
			not truncate file, but rather appends.  Returns the 
			file descriptor to the opened file.
		$close(fd)  closes the file corresponding to the fd.
		$read(fd) returns a line from the file corresponding to the fd.
		$write(fd text...) writes the line of text to the file
				corresponding to the fd.
		$eof(fd)  returns 1 if the fd is at end-of-file, 0 otherwise.

	These functions return -1 if there is some sort of error.
	More functions can be added if you tell me what you want to have.
	The "read" option uses uzfopen, so you can read compressed files
		via this method if you wish.

	Example of usage:
		alias cat {
			@ fd = open($0 R)
			do { echo $read($fd) } while (!eof($fd)) 
			@close($fd)
		}


EPIC2pre1 (2.8 compilant)

*** News 03/01/95:  do (if.c) (final support in pre2)
	Finally got around to supporting the do/while command.  It takes
	the following form(s):
		/do cmds
		/do {cmds}
		/do {cmds} while (expr) 
	All forms should work correctly.

*** News 02/28/95:  uzfopen (edit.c ircaux.c help.c)
	Added capability for ircII to automatically grok the *.Z, *.z,
	and *.gz compressed file extentions and automatically know what
	to do with them.  You may now compress any LOADable file, or
	any HELP file any way you choose (gzip or compress) and ircII
	will know what to do.  Blew away all uses of the ZCAT macro.

*** News 02/27/95:  Bug fixes, 2.8 compliance (all)
	Wow. Now that its all ANSI prototyped, i have to go through and
	fix all the function calls that are incorrect, especially most
	of the key binding functions. Some of them were (char, char *),
	some of them were (char *, void (*)()), and some of them were (void).
	Ick.  They all take (char, char *) now.  I need to go through and
	compile ircII with the -Wall option and find all the bugs i can...

*** News 02/15/95:  More Undernet Support (edit.c status.c)
	u2.9 commands /RPING, /UPING, and /MAP now supported
	u2.9 user mode +d now supported.
	mu3 /SILENCE command and replies now supported

*** News 02/9/95:  Hack for 'uname' and 'c-like comments'
	see config.h about #define UNAME_HACK and #define COMMENT_HACK
	basically, it provides some sanity checking for people who dont
	like 1) giving out their uname's, and 2) having scripts like
	phoenix break on EPIC. (awwwww! >;-)
 
*** News 01/10/95:  Bug fixes (alias.c)
	A tertiary operator without a colon (? but no :) caused a
	coredump: this has been fixed

*** News 01/02/95:  Sanity check for SUPPRESS_SERVER_MOTD (numbers.c)
	If you have /set SUPPORT_SERVER_MOTD set to ON, then you
	cannot hook /on 372, 375, or 376 the first time you join
	a server (ie, its suppressed).  You will still hook these 
	ons any other time you do a /motd.

*** News 01/02/95: new set: NUM_OF_WHOWAS (vars.h.proto vars.c edit.c whois.c)
	Allows you to set the number of WHOWAS replies you will recieve
	from the server for any given /WHOWAS command.  If the value is
	nonpositive, the WHOWAS suppression is turned off and you will 
	recieve all the WHOWAS replies from the server.  If it is set 
	to a positive number, you will recieve up to but not more then 
	that number of WHOWAS replies per command.

	You can override the set by using /WHOWAS <nickname> <NUMBER>
	where number is the number of whowas's you want for that 
	command ONLY.  It does not change the default.

*** News 12/22/94:  Command line parser rewritten (irc.c)
	Revamped the command line argument parser, its not quite as 
	quirky now, and is more able to cope with different styles.

	The biggest change (that will break things) is that every flag
	must be preceeded by a hypen (ie, -lbs is *not* the same as 
	-l -b -s any more.)

	Of the commands that need to take an argument, the argument
	may either be in the same "word" as the flag or may be in 
	the next word. (ie, -lfoo.irc is the same as -l foo.irc)

	Arguments given in the same word to flags that do not expect 
	an argument elicit a warning but are not fatal.

	Naked arguments (arguments not starting with a hyphen) are parsed
	just like they always have been, with the first naked argument
	being used as the default nickname and any other naked args used
	as default server(s)

	All taken into account, it is intended that the command line
	arguments will now be easier to use and wont be quite so
	painful with its (oft) mistaken restrictions...

	New command line argument(s):
		-n    sets the default nickname

	The command flags -I and -i will be supported in some future 
	release. (used to determine default visibility)


***************************************************************************
EPIC1.003 (vars.h.proto vars.c alias.c)

	Added new set, /set PAD_CHAR that is used to determine the
	padding character used in the "width" expando (ie, $[10]foo).
	While syntatically PAD_CHAR may be set to any string, only the
	first character will actually be used and the rest are ignored.

EPIC1 (2.6 compliant)

	Upgraded to 2.6 (of course)

	Functions isalpha() and isdigit() added:  isalpha() returns "1"
	if first character passed is a lowercase or uppercase letter.
	Isdigit() returns "1" if the number is a digit, or is a hypen and
	the second character is a digit.

	Most (all?) of the word functions now call new_next_arg() instead
	of next_arg().  What this means for you is that if you wish, you 
	can group more than one word inside of quotation marks, and they
	will be considered as one "word" for matching/counting/etc.
	The usefulness of this will be demonstrated below. ;-)

	Flexible hooks have been added:  You can enter and recognize
	flexible hooks by using single quotes (') instead of double
	quotes (") around the pattern in the /on statement.
		So:  /on join '$N *' echo $*
	will /echo $* any time you join a channel.  The difference
	between a flexible hook and a regular hook is that the
	flexible hook's pattern is not static, but rather is dynamic,
	and any variables in the pattern will be expanded before it
	is matched against the incoming line.  This allows you to put
	variables/functions in a pattern and have it work right.

	Ability added to allow inline explosion of regular expressions.
	If you place two or more words inside a \\[ \\] set, the word
	that makes the pattern best match the string will be used:

	Example: (newlines added solely for readability)
		$rmatch(jnelson@rush.cc.edu 
			"sconway@\\[ugly raisin\\].ucs.indiana.edu"
			"jnelson@\\[rush.cc.edu it.uwp.edu\\]")

	would return "2" because the 2nd pattern matches the string.

		$rmatch(sconway@raisin.ucs.indiana.edu
			"sconway@\\[ugly raisin\\].ucs.indiana.edu"
			"jnelson@\\[rush.cc.edu it.uwp.edu\\]")

	would return "1" becuase the 1st pattern matches the string.

	Note the use of quotation marks around the 2nd and 3rd argument
	(which contain spaces) allows them to be considered as one
	logical word.

	An example that combines the previous two features:

		/assign $ak nick@user*host lamer@bogus*host
		/on JOIN '% % \\[$ak\\]' kick $1 $0 

	This ON will be parsed as follows:  Since this is a flexible hook,
	the $ak will be expanded to its value each time someone joins a 
	channel.  Next, it sees that the value of $ak is inside a \\[ \\]
	pair, so it subsitutes each word inside the pair into the expression
	to see which (if any) best match the pattern.  The value of a
	\\[ \\] pattern is the number of characters that is matched
	by the word in the pattern that exactly matches the most number of
	characters in the pattern.

	While it is syntatically acceptable to use nested \\[ \\] sets,
	the behavior of this is currently undefined and should not be used
	or trusted to be consistant in any future releases.


	The $which() function can now take two arguments, with the
	first being the file to search for, and the second argument
	being a colon seperated path.  The second argument is optional
	and $LOAD_PATH is used if no path is specified.

EPIC-pre1 (2.3.23 compliant)

	Ban listings are now counted, and the total number of
	bans is displayed (or available via /on 368 as $1)

	Undernet numerics are now (mostly) supported, and the
	additions to present numerics are also supported

	(Obsolete stuff about ZCAT removed)

	If you want things the way wintrhawk has them, just
	#define WINTRHAWK somewhere in config.h: otherwise things
	will appear as they normally are, more conventionally.

2.3.23+11.1

	(obviously) upgraded to 2.3.23

	Included stuff from wintrhawk: (everything from here on till
		you see the 2.3.22+11 line is from WintrHawk)

	Added 6 new STATUS_USER [4..9] variables that will only show in
        your NON-CURRENT window.  SHOW_STATUS_ALL must be OFF for these to
        work.  You can predefine these in the config.h or utilise them in
        exactly the same manner as you would STATUS_USER[..3].

	Additionally, all STATUS_USER variables can now be called with
        %0..%9 in STATUS_FORMAT with backwards compatibility of:
 
			[%U, %X..%Z] == [%0..%3]

	I hope you'll find these usefull in displaying additional
        information on your statusbar.  Look for my updated scripts that
        will take advantage of these in the near future.  I actually do plan
        to add more STATUS_USER variables but I don't have the time or
        patience yet.  |8^)

	Fixed the core dump problem when you attempt irc -h.

	Got rid of the "ircII%s..." bug that refused to show version info on
        abnormal termination.

        Introduced a new global variable UNAME to define system type and
        release information during a CTCP VERSION reply.  Maybe one of these
        days I'll have it autoconfig'd with the Gnu AutoConfigure Script.

        Fixed the bug that hop introduced that would strip all leading
        whitespaces from the input line.  Maybe he had a hidden agenda for
        doing that... I just found it annoying.

        DCC TALK was disabled because the routines didn't work right.  It's
        now fixed.

        Also fixed the bug that would cause you to exit even if you answered
        "no" to the "Do you want to quit?" prompt after hitting ^C.

        Changed +10's IRCFINGER routine.  Functionality remains the same.


2.3.22+11 

	New function: $which() searches your LOAD_PATH for
	the filename you specify, and returns the full path
	to it.  Useful for this example:
	
	alias send_script dcc send $0 $which($1)


	You can now enclose arguments to /LASTLOG inside "".
	You can also now use wildcards in /LASTLOG to determine
	what you want to search against.  If you use these two
	together, you can search for multi-word regexes.

	example:  /lastlog "t*is su"
		  /lastlog -literal "6667 is the port for irc"
		  /lastlog o*er
	

	$before() and $after() now have a few new features.
	You can now supply an optional integer value as the
	first argument to these functions, and if present, will
	be used to indicate which instance of the characters
	you wish to use.  If the number is negative, it counts
	off from the end.  You can also supply more then one
	character to look for, if you wish.  Some examples:

	# completely backwards compatable
	$after(! hop!jnelson@pv0420.vincent.iastate.edu)
		returns "jnelson@pv0420.vincent.iastate.edu"
	$after(-1 . hop!jnelson@pv0420.vincent.iastate.edu)
		returns "edu"
	$before(2 . hop!jnelson@pv0420.vincent.iastate.edu)
		returns "hop!jnelson@pv0420.vincent"
	$before(-3 . hop!jnelson@pv0420.vincent.iastate.edu)
		returns "hop!jnelson@pv0420"
	$after(-5 . hop!jnelson@pv0420.vincent.iastate.edu)
		returns "" because there are not 5 .'s


	Added new operators: +=, -=, *=, %=, /=, #=.  All do
	just what they do in C, except for #= which is a 
	string catenation operator.  I hope to have &=, ^=, and |=
	in the next release.


	New Keybinding: SHOVE_TO_HISTORY: simply takes what you
	have in the input line, saves it to your history, and
	then clears the input line (presumably for more pressing
	needs). You can get back to your line whenever you
	wish by just cycling through your history.
	Comes bound to ^] by default.

        
	$F now returns the time the client booted up,
        in $time() format (long integer in seconds since 1970)


	$J now returns the ircII client version you are
	running as a string ($V returns the date released)



2.3.17+10

        A new hook, /on EXIT will be hooked as the client is exiting.
        This hook is not recoverable (the client can not be stopped 
        from exiting when /on exit is hooked), but you can do some 
        housekeeping before the client quits with this.

        The /DUMP command can now have 4 optional arguments
                "ALIAS" dumps all aliases
                "VARIABLES" dumps all variables
                "ON" dumps all ons
                "ALL" dumps everything
                If no args are given, all is used as the default.

        New function $chr(int int int int)
        Returns the string corresponding to the ascii numbers given
            $chr(65 66 67 68) returns the string "ABCD"

        New Function: $ascii(string)
        Returns the ascii numbers corresponding to the chars given
            $ascii(ABCD) returns "65 66 67 68"

        Thanks to tychy for the following idea.
        When you get an incoming dcc handshake, the userhost of
          the person who sent you the request is displayed, as well
          as the machine that is in the handshake, and the port number
          in the handshake.
        If the port number is less then 1024, it is rejected.
        If the userhost does not agree with the ip number, beware!

        Added two functions: $before() and $after()
        Syntax: $before(chars text text text)
        Usage: Returns the text (before|after) the first instance 
                of any character in "chars"

        $E now returns your idle time.

        Added C-like comments /* */.
        Limitations:
                While comments may span more then one line, code
                may not be broken up over one line.  For example:
                        echo test /*  this is a comment
                           this is more comment */booya
                will echo "test" and execute the alias booya.

		If you #define COMMENT_HACK, you can only have C like
		comments that start at the BEGINNING of a line.  The
		end of the comment still can occur anywhere.

        Fixed the serial numbered hook bug.  The one where any serial
        numbered hooks higher then the first serial number hook set
        that did not have a match were not hooked.

	Fixed the mother of all memory leaks.  The one that leaked
	the channel mode each time the status bar was updated. Phone
	fixed this but introduced a new bug in the process.  That bug 
	got fixed in EPIC1.

        Added the ~ operator (Bitwise negative)

	Added the comma operator.  What it does is evaluate the 
	expression to the left of the comma, and throws away the 
	result, then evaluates the right side and returns it.

	If you are kicked from a channel, and there is a channel
	key, auto-rejoin will use that key.

2.3.16+9

        Reworked the mathematical parser (next_unit) as follows:
                * Added the &, |, and ^ operators
                * Made && and || short circuit
                * Added the tertiary operator
                * The order of hirearchy is the same as C++,
                        the main change being that assignment
                        has LESS priority then conjunctions.

        Are you sick of when your status line repeats the last
        character off to the end of the line?  Then you can just
        /set status_no_repeat ON.

        Added the /ABORT command.  It does a "save" into the current 
        directory and then coredumps.  If ALLOC_DEBUG is defined,
        it does a memory dump, as well.  Useful for confused bots.
        NOTE: IT WILL *_NOT_* corrupt your .ircrc!

        New function $numonchannel().  Returns the number of people
        on the channel specified.  The channel may not be ommitted,
        and you must be on the channel in question. Returns 0 on error.

        Replaced Auto-reconnect in a new form, which was removed from 
	2.3.16.  Autoreconnect is done automatically on server kills.

        fixed the $ischanop() bug from 2.2.9.  The one where if 
        someone changed nickname, the client thought they were no
        longer opped.  This bug still seems to be around in 2.8,
	but it is not present in EPIC.

2.3.16+8

        Changed the /userhost command.  You may now use any number of
        nicks per command, delimiting the list with "-cmd", and each
        nick will be passed through the commands given.

        The client does not automatically turn on the screen when it
        is done loading a script, but rather honors the value of
        /set DISPLAY.  Dont ask me why it was changed in the first
        place.

        A mode stripper has been added:  The mode stripper does not
        replace /on mode, but rather complements it.  You can turn on
        the mode stripper with:
                /set MODE_STRIPPER on
        and then you can catch stripped modes with 
                /on MODE_STRIPPED "...."
        NOTE: /on mode STILL works even with the mode stripper on.

        The load parser has been partially rewritten fixing a bug 
        when a semicolon was the last char on a line.
        
2.2.9+7

        The behavior of the Command Parser has been changed, and you
        may now use {} blocks just about anywhere you want to,
        including the /userhost and /timer command, without having
        to use the /do command.  Try playing around with it, and
        youll see what i mean.

	The "WAIT has been called recursively" problem is no longer
	a problem, so the warning message has been removed.  Waiting
	recusively no longer locks up the client.

        New Functions:
                $center(length string)
                        Returns "STRING" centered in a field
                        of length LENGTH.
			To get a string of length 'length' you
			will need to use the width expando, ie
			$[length]center(length string)

                $split(delim string)
                        Actually, it just changes any occurances
                        of any character in DELIM to a space.
                        Useful with the $word() function.

        The % operator (modulus, aka remainder) has been added

        Full support for postfix and prefix (in|de)crement
            operators has been added.  They now work correctly
            and as you would expect.
        Remember:  $blah++  is not legal, it must be used as
                   ${blah++}.  Also legal is @ blah++.

        New Functions/commands:
        $SHIFT(var) removes word 0 from $var and returns it
        $UNSHIFT(var word) puts "words" at the beginning of $var
        $POP(var) removes the last word from $var and returns it
        $PUSH(var word) puts "words" at the end of $var, returns $var.

	These functions are also provided in command form, so that
		they can be used simply for their side effects.

        New Function:
        $SAR([r][g]/search/replace/text) - search and replace
             If 'r' is the first character,  "text" is assumed
                to be the name of a variable, and the text sub-
                titution is done on that variable and the result
                is put back into the variable, and is returned.
             If 'g' is the first character, all matches of 
                "search" will be replaced with "replace".  Normally
                only the first match is replaced.

             In any case, the first character that is not 'r' or
                'g' is assumed to be the delimiter.  You may use any 
                delimiter you want, but you should take care that
                you dont use it in the first two fields (obviously).
                The delimiter may safely appear in the last field.

2.2.9+6
        New Command: FEC
        Syntax:  /fec (string) var {commands}
        FEC iterates over STRING one character at a time putting
        each character into $var.  If you specify more then one
        variable, the first one is used, the rest are ignored.
        For each character in the string, the commands are 
        executed.
                /fec (booya) x {echo $x}
        would output "booya" one character on a line.

        New Command: DO 
        Syntax:  /do {commands}
        Useful for those places where you can only have one
        command, and backslashing semicolons doesnt appeal to
        you, like in /timer. 
	*** Note:  This command has added capabilities now.  But
	its straight use is generally uneccesary becuase the command
	parser is now able to deal with embedded {} blocks effectively.

        FOR, FOREACH, and FE are now all aliases of each other.
        If the arguments do not start with a '(', it is assumed
        to be the "FOREACH" command.  If there is a () pair, and 
        there are exactly two commas between them, it is assumed
        to be a FOR command, else it is assumed to be a FE command.

        New functions:
        $reverse(text) 
		reverses all the text character by character
        $revw(word ... word) 
		reverses the text word by word
        $jot(min max interval) 
		returns a list of numbers from "min" to "max" every
		"interval" integers, (interval is one if ommited)
		EXAMPLE:
			$jot(1 10) returns the string
				"1 2 3 4 5 6 7 8 9 10"
			$jot(2 10 2) returns the string
				"2 4 6 8 10"

2.2.9+5 (includes 2.2.9+4.1)

        New command: FOR (CMDS1, EXPR, CMDS2) {CMDS3}
        Looks and feels just like the C command (sorta)
                Upon commension, cmds1 is executed once
                Expr is then evaluated, and if expr is TRUE,
                        Cmds3 and then cmds2 are executed, 
                        Repeat loop.
                Stop command
        The comma was chosen as a delimeter on purpose, so you can
        have multiple commands in a set.
        Example:
        alias repeat for (@x=0, x<$0, @x++) {$1-}
        alias foo for (@x=0; @y=0, x+y<5 , @x=x+2;@y--) {echo $x $y}
    
        New command: DUMP
                Deletes all of your aliases, assigns, and ons,
                in case you really FUBAR things.  You can then
                /load global and your .ircrc to effectively reboot.

        New functions:
                RPATTERN (word patttern pattern...)
                  Returns all patterns that match "word"
                RFILTER  (word pattern pattern...)
                  Returns all patterns that do not match "word"
                COPATTERN (pattern variable1 variable2)
                  For each value in variable1 that matches the pattern,
                  the corresponding value from variable2 is returned.

        ENFORCE_STRICTER_PROTOCOL now forbids kicks from /on who.
        Using /on who to kick is lame anyhow....

        If you give the function $key() no arguments, or the argument
        '*', the current channel will be assumed.

2.2.9+4
        New command:  /QUEUE <flags> NAME <number> <{commands}>
        Flags:  -DO        run the commands in the named queue.  Deletes
                             the queue by default.
                -NO_FLUSH  when you run the commands, do not delete
                             the queue.
                -SHOW      show the contents of all of the queues
                -LIST      show the contents of the named queue.
                -DELETE    remove the numbered entry in the named queue
                -FLUSH     remove the named queue
        o The "QUEUE" command allows you to store a list of commands
          into named queues.  You may have as many entries into an
          individual queue as you like, and you may have as many
          named queues as you like.  
        o Error checking is not very tight right now, so if you try to
          crash the command by doing weird stuff, you probably will.
        o If you give a list of commands, they must be surrounded by
          braces, and they will be added to the named queue.
        o At this point, it is not recommended that you use more
          then one flag per command, as i have not tested this yet.
        Store commands:  /queue BOOYA {echo one}
                         /queue WAHOO {mode * +o nick}
        Exec. commands:  /queue -do BOOYA
                         /queue -do -no_flush WAHOO

        If you provide no arguments or the argument "*" to the
        functions $onchannel(), $chops(), and $nochops(), the 
        current channel will be assumed.

        New function: $key(#channel)
        Returns the channel key for #channel, (provided
        you are on the channel that you ask about)

2.2.9+3
        $X now returns your userhost
        $Y now returns your ircname

	(*** Deleted info about $tert() function that is obsolete)

        Added the builtin function $onchannel() that returns
        everyone on the channel given, but is only reliable if
        you are ON that channel.  Returns a null if you are not.

        Added the builtin functions $chops() and $nochops()
        They return the channel operators and non-channel
        operators on the specified channels.

        Karll's "Array Suite" has been incorperated.  The source
        file is array.c and the instructions are in ARRAY

        META5-9 have been added.  You now have 9 META keys to 
        work with.  Meta4 is still sticky.
    
        New command "REALNAME" (or "IRCNAME") allows you to change
        your REALNAME (the text on the right in the first line of
        a whois reply), it will take effect after you use the
        command "RECONNECT"


2.2.9+2
	Several new built-in functions have been added:
		$leftw(x list)  returns the x left words in list
		$rightw(x list) returns the x right words in list
		$restw(x list) returns the Xth word and after
		$midw(start stop list) returns the words start to 
			stop in list
		$notw(x list) return list without the Xth word
		$insertw(x word list) returns list with word added as
			the Xth word
		$remw(word list) returns the list without "word"
		$pattern(pattern list) returns all words in list that
			rmatch pattern
		$filter(pattern list) returns all words in list that
			do not rmatch pattern
		$chngw(x new list) returns list with the Xth word
			changed to new.
		$tow(word list) returns the list up to/including word
		$fromw(word list) returns the list after/including word
		$beforew(word list) returns the list before word
		$afterw(word list) returns the list after word
		$common(list1 / list2) returns all words present in
			both list1 and list2 (case insensitive)
		$diff(list1 / list2) returns all words not in both list1
			and list2 (case insensitive)

	/on encrypted_privmsg and /on encrypted_notice added:
		they have the same parameters as /on msg and /on notice
		expect that they only are hooked when the msg is encrypted.
		NOTE: If you hook these with ^, normal /on msgs will not
		be hooked. (you can override defaults)
		
	(Obsolete stuff about ZSUFFIX and loaded files removed)

	/on disconnect now hooks whenever you are not connected to a
	server, as stated in the help files.
	

2.2.9+
	(Obsolete stuff about ZSUFFIX and help files removed)

        Four new ONs added: NOTE: /on dcc_raw ALWAYS has higher
           priority over any of these ons.

        /on DCC_REQUEST tells you when you have recieved a DCC request
                $0  is the person sending the request
                $1  is the type of DCC request (chat, send)
                $2  is the description (filename for dcc send)
                $3  is the size of the file (for dcc send)

        /on DCC_LOST tells you when a DCC connection terminates
                $0  is the user connected to
                $1  is the type of connection lost
                $2- any additional information as applicable
   
        /on DCC_CONNECT tells you when a DCC connection becomes active
                $0  is the user connected to
                $1  is the type of connection being made
                $2- any addition information as applicable

        A new SET has been added, "AUTO_REJOIN".  When set to ON, 
        you will automatically rejoin the channel if you are kicked.

        A new command /FE has been added.
            FE (list of words) control vars { commands to execute }
        FE allows you to go through a given list of words using an 
        arbitrary number of them at a time, and execute a set of 
        commands once for each pass.  examples:
            /alias opalot fe ($2-) x y z {mode $0 $1ooo $x $y $z}
            /alias kickalot fe ($1-) xx {kick $0 $xx}
        The first would op/deop a list of people 3 at a time
        The second kicks a list of people

        An arbitrary limit of 255 control variables was used.

        A lot of scripts added.  Look through them, you might find
        some of them useful.

        CTCP FINGER returns a null. (if you #define HOP)