File: HISTORY.md

package info (click to toggle)
multimail 0.52-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,048 kB
  • sloc: cpp: 16,140; ansic: 82; makefile: 73
file content (2795 lines) | stat: -rw-r--r-- 120,743 bytes parent folder | download | duplicates (3)
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
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
Revision History
================

## 0.52 - 2019/04/01:

- Support extended length (71 character) To: and From: fields in QWKE
  replies. Reported by "g00r00" et al.

- For system names between 6 and 10 characters, use "MMail/name" instead
  of "MultiMail" for the Blue Wave tear line.

- Fixes for various warnings when building with current compilers; less
  cluttered build output.

- Use CURS_DIR to specify the default library location on the command
  line when building; removed references to CURS_LIB and CURS_INC.
  Partly due to Rob Swindell.

- Use "SYS=DOS" with Makefile.bcc, as with others, instead of "DOS=Y".

- Makefiles renamed PDCurses-style, for a simpler build process.

- Binaries built against PDCurses current git (post-3.8); Makefiles
  modified accordingly.

- Cleaned up documentation; also, the man page and README no longer
  include the version number, which is now only specified in config.h
  (and here).

See the git log for more details.

## 0.51 - 2018/04/01:

It is risen. No fooling.

- Enable blinking in PDCurses for the ANSI viewer, wherever possible.
  (Binaries of this version were built with PDCurses 3.6, which adds
  software blinking for most platforms.)

- The Windows build now allows resizing under Windows 10, or with ConEmu
  in some earlier versions.

- Workaround for corrupt messages.dat when using the fallback (non-.ndx)
  QWK scan -- keep looking for next valid header. Based on bug report by
  "XBessa".

- Blue Wave issue: macros string fields are different lengths in
  INF_HEADER vs. PDQ_HEADER. Reported by Frederic Cambus.

- A 64-bit version built with MSVC would crash on startup (other 64-bit
  builds not affected) -- fixed.

- NetBSD fixes by Frederic Cambus.

- The Mac build now reports itself as "MultiMail/Mac" instead of
  "MultiMail/Darwin"; also, "/DOS" vs. "/MS-DOS", "/OS2" vs. "/OS/2",
  "/Win" vs. "/Win32".

- Makefiles reorganized and reduced -- elminiated the per-directory
  build process; all objects are built in the top-level directory now.
  DJGPP and MinGW are merged into the main Makefile; DEBUG, SDL and X11
  are command-line options. MSVC does an all-at-once build (similar to
  PDCurses). Borland for Windows is restored, and building with old Turbo
  C++ is combined into Makefile.bcc via a command-line option. And
  Watcom now allows building for any platform via an option (instead of
  editing the Makefile).

- Removed separate "modules" file (now builds all) and "version" file
  (now defined in config.h).

- Dropped the mmail.spec file -- I think this is better left to distro
  maintainers.

- Dropped support for EMX; cleaned up some lingering references to
  RSX/NT.

- Various compile warnings and errors with more modern compilers, undone.

- New source code formatting -- four-space indentation, no tabs.

- Documentation "converted" to Markdown format (mainly just by renaming
  files); removed trailing spaces.

- Most references to "Win32" changed to "Windows", per Microsoft
  recommendations.

- Spelling and other doc fixes by Robert James Clay.

- Updated web and email addresses.

- The Artist Formerly Known as Peter Karlsson is now "Peter Krefting".

## 0.50 - N/A

There was never a formal 0.50 release, but over the years, people have
distributed versions of "0.50", based on the source code repository. So,
in an attempt to reduce confusion, I'm skipping "0.50" for the next
release.

## 0.49 - 2007/07/19:

- Built against PDCurses 3.3 (and 3.1 is now the minimum version that
  will work); removed XCURSES references, for the sake of PDCurses 3.2+.
  This is faster, and allows me to finally chuck the resize_term()
  kludge introduced in 0.42 (for the problem where the window scrolled
  up on return from shelling out in Win32).

- You can now use the "Transparency" keyword with PDCurses -- with the
  SDL port, you can achieve the same effects as in, e.g., Gnome Terminal
  with ncurses.

- I'm distributing the Win32 binary with pdcurses.dll dynamically
  linked, purely so that you can swap it out with the SDL version if you
  like (see http://pdcurses.sf.net/). It's fun to play with. :-)

- In "animate" mode, the ANSI viewer now pauses after each character.
  This feature was omitted for a long time because the animation was
  slow enough on older machines, and the shortest possible delay was
  still too long. But animated mode is useless nowadays without it.

- If the config files can't be written (updated), MultiMail no longer
  aborts with an error; instead, a message is displayed, with a pause,
  and it continues.

- Updated to GPL version 3.

## 0.48 - 2007/04/04:

- This version now builds with PDCurses 3.0, and if using PDCurses, will
  no longer build with an earlier version. This gives us mouse support
  for DOS and OS/2, and better idling in the XT version, among other
  improvements.

- New keyword: "Mouse". Setting it to "No" turns off support for mouse
  input. Mainly this is to allow disabling of the mouse cursor; it also
  means you can select without holding shift in X11.

- Use setlocale(), to give a correct display in environments such as the
  console under Ubuntu.

- The FAQ and TODO files were outdated, and not very useful.

- Removed the makefiles for EMX and Borland C++ for Windows. These
  compilers are basically dead. I also removed Makefile.wid -- full-
  fledged wide-character support will be coming in the future, but for
  now, this file was just more clutter.

- Changed "install" to a double-colon rule in Makefile to avoid conflict
  with INSTALL on non-case-sensitive filesystems, like Mac OS X's HFS+.

## 0.47 - 2005/12/31:

### New features:

- Added support for Microsoft Visual C++, MinGW, and Open Watcom. I highly
  recommend Watcom, and I'm now using it for the OS/2 port. I'd use it for
  the Win32 port, but sadly the directory scan (used in the packet list)
  is using the slow POSIX-emulation method rather the fast native method,
  and I haven't got that sorted out yet. MinGW is also very nice, and I'd
  use that, except that it needs MSVCRT.DLL, which doesn't come with old
  Windows 95. So -- rather than continuing with the 5-year-old Borland 5.5
  (although it still works) -- I'm delivering an MSVC-built version. This
  version doesn't support set_new_handler(), but no one is likely to
  notice (famous last words). Also, I've finally dropped the pretense of
  supporting RSX/NT.

- The starting directory and home directory are now added to the PATH
  searched for archivers and editors, so you can include them in the same
  directory with mm.exe. I'm taking advantage of this to bundle InfoZip's
  zip and unzip, hugely bloating the Windows zip, but hopefully stopping
  the complaints I get from people who can't figure out how to set up
  archiving themselves.

- Support for the "GreekQWK" variant, which uses 0x0C instead of 0xE3 as
  the line delimiter. Reported by Dimitris Mandalidis. Note that there's
  still no particular support for the Greek _character set_, but you can
  probably make it work by disabling character set conversion.

- A mouse click in the lower half of the screen, in the ANSI viewer, now
  counts as if the spacebar had been pressed, instead of PgDn. Also, when
  the screen is at the start, even clicking in the top half counts as a
  space. This makes for easier mouse-only navigation with the new welcome
  screen display.

- Included Makefile.wid for wide-character ncurses. This doesn't really do
  anything yet, except give you the proper background character instead of
  the octothorpe, and work semi-decently in a UTF-8 Linux VT. For now, I
  don't recommend using it, nor distributing binaries based on it.

- Various documentation updates.

### Bug fixes and such:

- Revisions for newest version of PDCurses -- fewer ifdefs needed. Note
  that MultiMail now must be compiled with PDCurses 2.7 or later.

- Changed some compiler options to work better with recent gcc.
  Unfortunately it bloats the executable.

- Removed the distinction between Bulletins and New file lists, so there's
  only one prompt to bother you with now.

- Minor code cleanup.

## 0.46 - 2003/12/31:

### New features:

- First, an apology: This version probably should've come out in July, when
  most of these changes were done... though there was a bug in one of the
  new features that didn't show up until Halloween.

- MultiMail now displays the appropriate screens (when it can determine
  them) on opening and closing a packet, instead of just adding them to the
  bulletin list. This is more like the way most other OLRs work (though not,
  e.g., Blue Wave). I hope you like it. :-) I had to adjust to it myself,
  but now I wouldn't go back.

- The ANSI viewer now includes partial support for AVATAR (level 0) and
  BSAVE (.BSV; text-only). As with the parsing of AT codes, these can be
  toggled, via ^V and ^B respectively.

- The lower portion of the area list display has been redesigned. It now
  includes the name of the Door and BBS that created the packet, if
  available, and omits the duplicate description. The field formerly
  labelled "BBS:" is now "Name:"; "BBS:" is used for the software type
  instead. In the upper portion, there's a little more room for the
  descriptions. Door type in OPX mode is not entirely satisfactory; some SX
  doors seem to use the field for BBS version instead. Neither of the new
  fields is available in Blue Wave mode.

### Bug fixes and such:

- With this version, I've added MIPS and AMD64 to my list of tested systems
  (no mods needed). However, I'm not including those binaries, because a)
  the MIPS binary I built is only for a Tivo, and doesn't display onscreen
  anyway, so you'd have to telnet in or use a serial console; and b) there's
  a small but annoying bug in the (beta) version of ncurses used on SF.net's
  AMD64 compile farm machine, such that the window borders all show up with
  the wrong color. (The problem is not actually 64-bit related. Also, please
  note that MultiMail itself has been 64-bit ready for a long time, since
  being ported to the Alpha processor.)

- Fix for some incorrect CONTROL.DAT files -- a failed read (because a file
  was too short) was returning a dupe of the last line; now returns a blank.

- Make reply endings in OPX conform better to what SX does -- CR/LF, and a
  trailing zero. (I noticed that the tearline was being eaten by the Wildcat
  SX door on Doc's Place, and there was _no_ final CR/LF... I don't think it
  used to do that, but anyway, this fixes it.)

- ANSI viewer: Allowed right arrow to exit even in lynxNav mode -- makes
  more sense with new Hello/Goodbye behavior; fewer false positives when
  interpreting AT codes; better handling of chars 0-31 and some others,
  under ncurses; no more overlapping of screens when a screen clear command
  is rendered.

- Some code simplification.

## 0.45 - 2003/06/08:

### New features:

- New temporary directory and file system: Instead of using tmpnam() --
  which frankly never worked properly outside of Unix, and is sometimes
  regarded as a security risk there -- MultiMail now generates temp
  directories of the form "workNNNN", where NNNN is a random number, under
  the directory specified by the new .mmailrc keyword "TempDir". By default,
  TempDir is set to the same value as mmHomeDir. NOTE THAT IF YOU'VE BEEN
  USING ENVIRONMENT VARAIBLES TO SPECIFY A TEMP DIR, IT WILL NO LONGER WORK.
  They aren't even used to set the default (as with EDITOR). In the XT port,
  TempDir also now specifies the location of the swap file, if that feature
  is enabled. And temporary files are now created as "tmpNNNNN.txt" under
  the workNNNN directory, where NNNNN is a serial number; so they no longer
  clutter the base temp directory, they have the ".txt" extension some
  editors depend on, and there's no longer a problem with editor-created
  backup files being cleared out.

- Big improvements in the ANSI viewer under Unix: For those terminals (like
  the Linux console) that support the "smpch" terminfo capability, the IBM
  PC characters are passed through directly. For other terminals (like
  xterm), the use of the widely unimplemented ACS_BLOCK and ACS_BOARD has
  been replaced with an inverse space and ACS_CKBOARD, respectively. (In
  ncurses' curses.h, ACS_BLOCK and ACS_BOARD are identified as "Teletype
  5410v1 symbols", while ACS_CKBOARD is in the "VT100 symbols" group.
  Everything supports VT100, but few terminals support the other class.)
  Note that the use of the inverse space does present a problem when
  characters have the A_BOLD attribute, as it's interpreted differently by
  different terminals, so that some will make the cell "bright", and some
  won't; but this seems to look best on the greatest number of terminals.
  Also note that "xterm -fn vga -tn linux" is still the best way to view
  ANSI under X. ;-)

- A new method for setting mmHomeDir: If it's based on the environment
  variable "HOME", add "mmail" to the end, as before; but if it's based on
  "MMAIL" or the start directory, don't. Practically speaking, this should
  make it apply "mmail" under Unix and not under DOS-ish systems, in most
  cases. That means that if you create a directory like "C:\MMAIL" and run
  mm.exe from there, it will no longer create "C:\MMAIL\MMAIL\DOWN", etc.,
  but simply "C:\MMAIL\DOWN". Note that this (unlike the new temp system)
  applies only to new installations; upgrades will not alter existing
  MMAIL.RC pathnames.

- The name shown at the top of the screen is now "MultiMail/Sysname vX.X" --
  i.e., the same as would appear in a QWK reply tearline -- instead of
  "MultiMail offline reader vX.X". Shorter, yet more informative. :-)

### Bug fixes and such:

- Doing a ^X during a bulletin would cause a segfault.

- A malformed 'H' command (e.g., using "0" as a parameter) in ANSI could
  cause a segfault.

- The window title is explicitly set to "MultiMail" in the Win32 and XCurses
  ports. This eliminates the problem where "UNZIP" would remain in the title
  after unarchiving a packet under Win 9x.

- Revived cursor mode save/restore routines for PDCurses (except for Win32,
  where it doesn't work); moved cursor restoration after endwin() call in
  mysystem() (this is why it didn't do the job before).

- Updated Makefiles for PDCurses 2.6, and GCC 3.2.1 (in the case of EMX). I
  strongly recommend upgrading to PDCurses 2.6, in most cases, as it already
  incorporates my patch for halfdelay(); however, there's a fatal bug in the
  OS/2 version. (Write me for a patch.) I also recommend ncurses 5.3 over
  5.2 -- for one thing, it fixes the problem with the bool declaration that
  broke searching and animation in some installations -- but I've left it as
  5.2 in the Makefile, for now, because I have too many systems to recompile
  it for. :-)

- Remaining compilation warnings eliminated for most platforms: Got rid of
  tmpnam() (see above), moved "%y" strftime() strings outside the calls
  (copied this from Ingo Brueckl), and added "-Wno-deprecated" to the
  Makefile options for the latest versions of gcc.

- Useless .mmailrc keyword "homeDir" removed. (It specified the base value
  for mmHomeDir, but in most cases that was already specified explicitly on
  the very next line.)

- Stronger attempts to use backslash characters instead of slash where
  appropriate in MMAIL.RC (depending on the platform). But again, this is
  cosmetic.

- Optimizations, comments, etc.

## 0.44 - 2003/05/07:

### New features:

- Added the pipe character, '|', as an alternative to '^' for invoking the
  filter function. It turns out that '^' is a poor choice for many non-U.S.
  keyboards; sorry. The pipe character is also somewhat more consistent with
  other programs with similar functions. Problem reported by Peter Krefting.

### Bug fixes and such:

- Changed the way that the length of QWK replies is calculated. This is a
  speculative fix for a reported problem with corrupt replies that I
  couldn't reproduce; but from what was described, this _should_ do it. At
  any rate, the new code is simpler and cleaner. Reported by Jimmy Day et
  al.

- Pressing the "END" key in string input fields now works correctly, taking
  the cursor to the end of the field instead of ending the edit. Reported by
  Touko Rajala.

- Bogus/unintentional '@' color code sequences could cause segfaults in the
  ANSI viewer. Reported by Neall Mercado.

- In the Win32 version, under NT (though not 9x), the temporary directories
  were not being deleted.

- The filter was not working correctly in the LittleAreaListWindow.

- Junk could appear in the LetterList on a resort if some messages were
  read.

- Narrowed the width of some windows as a workaround for display bugs in
  xterm.

- Added "-inul" to the default command lines for RAR to suppress the output.

- Minor internal changes to allow compilation and remove warnings under
  Sun's SUNWspro C++ compiler. This also entailed the elimination of the
  sillier of the "set_Letter_Params()" functions, which was long overdue.
  :-)

- Miscellaneous small changes for efficiency.

## 0.43 - 2002/03/09:

### New features:

- A big one: Filter feature in all list windows, invoked by pressing '^'
  (shift-6). See the "FILTERING" section of the man page for details. This
  was inspired by similar features in the Pan and BNR newsreaders.

- Clock in the upper right corner of the letter window. (I would've added it
  to the others, but they lack an obvious place to put it. I figured that
  one spends most of one's time in the letter window anyway.) It can show
  time of day, time since startup, or be disabled, as controlled by the new
  keyword "ClockMode". Note that this required changes to the keyboard
  routines (now using halfdelay() instead of a blocking call), which in turn
  affected the ability of MultiMail to give up CPU time when idling. Most
  ports still use little CPU, but the XT version pegs it high, except under
  DOSEmu. (Old versions of DOSEmu, ironically, instead show high CPU usage
  with the new DOS (DPMI) version, which doesn't have that problem under
  Windows or OS/2.) Also, I had to fix PDCurses to make this work -- write
  to me if you want the patch.

- "AT code" parser for the ANSI viewer, for PCBoard and Wildcat '@' color
  codes. (I've only seen these used in the sample packets that came with a
  few readers -- do they exist in the wild?) Also, "ANSI music", though
  still not played, is now filtered out, so at least it doesn't clutter the
  image.

- The "UseColors" keyword is now available in the PDCurses (DOSish) ports.
  That means a monochrome mode, which should help on some displays.

- The packet name is now displayed when in the letter list, letter window or
  ANSI viewer. No more having to back out to check. :-) The placement of the
  packet name in the area list window has been changed for consistency.

- The tagline window can now be sorted, optionally.

- An "Opening..." notice is now displayed when entering an area, as when
  opening a packet. (This operation can be slow, so it's good to have a hint
  that MultiMail got the message.)

### Bug fixes and such:

- The type 'm' (Unix mailbox) parser in the SOUP module was missing some
  valid "From " separators, so I incorporated code based on the VALID macro
  from the C-Client library by Mark Crispin. I've read conflicting claims
  about whether its "free-fork" license is GPL-compatible, but since I don't
  see a better way to do this, I've chosen to assume that it is, at least for
  now. Anyway, this may in fact be the _only_ valid (no pun intended) way to
  parse a Unix mailbox without false positives or negatives.

- The ANSI viewer was not displaying the headers of SOUP messages when
  animating them, or thereafter. This was really a problem with multiblock
  messages (otherwise not noticeable except in the XT version, and then only
  with a message over 64K). Also, the ANSI viewer now acknowledges "expert"
  mode (i.e., it omits the "F1 or ? - Help" message from the lower right).

- The address book and tagline windows now show the number of items, like
  the other lists.

- In an xterm, when the tagline window was active, bits of the scroll bar
  and the screen border were being replaced with blanks. I've fixed this in
  an ad hoc way, but I'm not quite sure what caused it.

- An empty file list in the packet window caused problems. Normally you
  wouldn't see this, because there's always at least a ".." entry for the
  parent directory. But the filesystem on a Windows CE device apparently
  lacks them, as I found when running MultiMail/XT under PocketDOS.

- Setting the "UseColors" keyword to "No" now forces the use of the default
  colors (or rather, the monochrome version of them), as the .mmailrc
  comment had already claimed it did, instead of the monochrome version of
  the colors specified by "ColorFile".

- The "Reverse" attribute will no longer be stripped from a color file
  that's rewritten by a PDCurses (DOSish) port.

- If the tagline file existed, but was completely empty, a segfault would
  occur on selecting the (nonexistent) tagline when composing a message.
  Reported by Touko Rajala.

- Some really basic stuff added to the man page -- it always should've been
  there. Further revision is needed.

- Minor speedups.

## 0.42 - 2001/12/08:

### New features:

- CTRL-E instead of 'E' now forces invocation of the addressbook when
  entering a message in a non-netmail, non-email area. This only gets you
  the real name portion. I don't really see the use of this myself -- the
  entire point of the addressbook is to store netmail and email addresses,
  not simple names -- but it was requested, and easy to do, so here it is.
  It works wherever 'E' works (area list, letter list, letter window),
  although due to space considerations and laziness, it only appears in the
  letter list's help menu. Note that you can still only use the 'L' function
  of the addressbook on messages where an address is present. (Changing that
  would be more involved.) Suggested by Greg Sears.

### Bug fixes and such:

- In the Win32 version, under Windows XP and perhaps 2000 (?), the window
  was scrolled up on returning from a shell (unarchiving, etc.), unless the
  scrollback buffer was disabled. Although cosmetic, this was enough of a
  nuisance that I'm releasing 0.42 now.

- Added strings.h to the includes in mmail.h to get it to compile under QNX.
  (If you're trying this, edit the Makefile to say "-lncurses" rather than
  "-lcurses".) Note that the background characters (ACS_BOARD and
  ACS_CKBOARD) aren't what they should be in QNX; otherwise, it works well.

- New error message for the case when no files are found in the work
  directory after uncompression, but no error code was returned by the
  unarchiver. (Previously this resulted in the misleading message "Packet
  type not recognized"; that message is now reserved for times when there
  are actually some files in the work directory.)

- Since version 0.38, when I moved development to a new computer, the
  documentation file "mm.txt", included with the DOSish ports, had not been
  converted correctly by the script that builds those archives -- it was
  left as raw troff code instead of a rendered man page, and the line
  endings were left as LF (Unix style). In other words, it was basically
  illegible. The discouraging part of this is that no one reported it, which
  makes me think that no one's reading the documentation. :-(

- Other, minor updates to the documentation.

## 0.41 - 2001/10/16:

### New features:

- Options can now be specified on the command line. Any .mmailrc option may
  be used, though not all will actually work (some of them are used in
  initialization before this point). Options are preceded by '-' or "--",
  and must finish before a packet is specified. See the man page for more
  details.

- New keyword: "IgnoreNDX". This makes MultiMail ignore the *.NDX files in
  QWK packets, in favor of the new (slower, but safer) indexing method that
  uses only MESSAGES.DAT. Turn this on if you get bogus *.NDX files from
  your BBS (as seems all too common).

### Bug fixes and such:

- Big bug: Reply splitting in QWK on DOSish systems (DOS, Win32, OS/2)
  generated a corrupt reply packet (always). It's been this way a long time;
  possibly since the message split feature was introduced. I never noticed
  it because a) I rarely split messages, b) I seldom use QWK anymore -- all
  SOUP and BW now, c) I never use the DOSish ports, except for testing, and
  d) the split replies _look_ OK, until you close and reopen the packet. I
  had a lot of bug reports which, in retrospect, seem to be about this, but
  I never got enough detail to make sense of the problem, until Ken Hrynchuk
  reported on it. Many thanks to him.

- Bogus values in the *.NDX files of a QWK packet are now checked for and
  often handled without having to abort. In some cases, MultiMail is able to
  revert to the alternate indexing method automatically; in others, the
  message "ERROR READING MESSAGES.DAT" appears in the letter list, instead
  of the gibberish that resulted when following a bogus pointer. For those
  cases which still cause problems, see the new "IgnoreNDX" keyword.

- Problems with the ncurses configuration on Mandrake 8 (well, on my system,
  anyway) caused MultiMail to hang on searches or ANSI animation. There's
  now a partial workaround for this (searching works OK, ANSI anim still
  hangs) in MultiMail. But the proper fix is this: Download the ncurses
  source; configure; manually edit the line in curses.h that defines bool to
  say "typedef unsigned char bool" instead of "typedef unsigned bool";
  compile; and install. I still have to figure out why the typedef comes out
  that way; the same version of ncurses (with the same configure script)
  works correctly on my old Slackware system. You might see this problem on
  other systems as well.

- Blue Wave messages with Internet kludge lines (as produced by version 4
  doors) were causing segfaults. This is what happens when a feature doesn't
  get exercised for a while. :-(

- Segfault on a message with a MSGID kludge line, but no other body text.

- In the Win32 port, packet time stamping now works under Win 9x, though it
  still doesn't work on network shares under NT.

- Some unprintable characters weren't being filtered out when running in an
  xterm, resulting in a garbled display.

- In the 16-bit port, in QWK packets with no *.NDX files, MultiMail was
  failing if the MESSAGES.DAT file was larger than 32K.

- The END key now works under screen (for example) with ncurses.

- The message-splitting function now uses parentheses instead of brackets,
  and the part number is padded with leading zeroes. I did this to match
  standard practice in the alt.binaries.* newsgroups.

- Added the undocumented option "-#" to the default command lines for PKZip
  and PKUnzip. This suppresses output, equivalent to the "-q" option used in
  the default InfoZip command lines. Suggested by K.H. (Note that if you're
  upgrading, you'll have to put it in manually, if you want it; as always,
  MultiMail won't alter values that are already specified in its config
  file.)

- Shelled commands (zip, unzip, edit) can now handle paths with spaces in
  them.

- On MultiMail's first run, on DOSish systems, the MMAIL.RC ended up with
  paths that had a mix of slash and backslash characters. Although this
  didn't interfere with operation, it was a cosmetic defect.

- The defaults in the top-level Makefile have changed to "<curses.h>" for
  CURS_INC, and "-lcurses" for LIBS. Most/all distros of Linux, as well as
  FreeBSD, have replaced the older curses with ncurses by now, and some
  (e.g., Debian) lack the old-style compatibility links, so this now seems
  to be the most widely compatible configuration. (The old defaults are now
  in the first commented-out example section.)

- I figured out the problem that led to the hasty release of version 0.40 --
  it was a missing pair of parentheses. <sigh> Or to look at it another way,
  a misunderstanding of operator precedence.

## 0.40 - 2001/04/15:

### New features:

- Nothing new this time.

### Bug fixes and such:

- Undid one part of the BSOC, which (perversely enough, since this is exactly
  what it was intended to cut down on) was causing crashes in the Win32, XT,
  and OS/2 ports. I still haven't nailed down WHY it was doing this, but I
  isolated the source of the trouble by brute-force analysis. :-( I promise
  better testing next time.

- Useless mouse code now omitted in DOS, XT and OS/2 ports. (Yes, I hope to
  actually support the mouse on these platforms eventually. First, mouse
  support has to be added to their respective ports of PDCurses.)

## 0.39 - 2001/04/13:

### New features:

- Mouse functionality. Currently, this is only supported under X (with
  either ncurses or PDCurses), in the Linux console with gpm, and in the
  Win32 port. See the man page for a description of how to use this -- not
  well-described there, but it should be fairly intuitive.

- A new flag to join Marked, Replied, Read and Private: Saved. It's set
  automatically when a message is saved (natch). It appears in the letter
  list as a lowercase 's', and as a new flag in the group displayed in the
  letter window. (Note that if the message is also Marked, only the 'M' will
  appear in the letter list -- I was short of columns.) Because of this, the
  names displayed in the letter window have been shortened. Saving a message
  no longer marks it as Read, since that seems redundant now (though it
  still does clear the Marked flag). The new flag is mapped appropriately in
  .XTI files, but not in MAIL.FDX, so it's not preserved in OPX packets.

- New transparency method: The transparent background color is the one
  specified by "Main_Back" in the colors file, rather than always black.
  This allows the use of transparency with light backgrounds, etc. (See the
  screenshots web page.)

### Bug fixes and such:

- A longstanding bug: It was impossible to rename packets after opening
  them. Finally fixed, as part of a big string-operation cleanup.

- Another longstanding one, also part of the BSOC: On some platforms, when
  specifying a packet name on the command line, names of certain lengths
  wouldn't work. After I finally sorted this out, the surprising thing was
  that it had ever been working for names of any length. <sigh>

- Many potential buffer overflows and bogus limits fixed in the BSOC. Others
  remain. :-(

- Since time immemorial: When pulled from the address book into a message,
  the "To:" field was being restricted to 29 characters, regardless of packet
  type. Also, the length of names in the address book had been limited to 44
  characters.

- A fresh one: Reply packets were being stamped with a bogus date.

- The packet list, if sorted by time, is no longer rearranged when a packet
  is Touched.

- Replies are now preserved in the event of a crash during the write-out
  process. Inspired by Matt Munson.

- The highlight bar wasn't showing up in XCurses -- probably since about
  version 0.18, which shows how often I try that port. (I also had some
  other problems with XCurses, as yet unsolved; it sometimes locked up on
  starting.)

- Stupid bug in SOUP: segfault on message areas with 8-character filenames.

- The line showing "BBS:" and "Sysop name:" in the area list is now omitted
  if neither is defined (as in SOUP packets), leaving an extra line for the
  areas themselves.

- The minimum screen size is now 60x17. I'm shooting for 40 columns. ;-)

## 0.38 - 2001/02/03:

### New features:

- First new version in over seven months! See, it's not dead after all.

- Transparency: There are three new keywords in the .mmailrc which are
  mainly for making the background transparent, for use in programs like
  Eterm which can put an image in the background: "UseColors" (default:
  yes), "Transparency" (default: no), and "BackFill". "Transparency" only
  works in ncurses; "BackFill" is the only one available on all platforms.
  See the man page for more on these.

- New date/timestamp handling: When updating packets with the .red markers,
  MultiMail now preserves the original timestamp of the file. This means
  that date sorting will reflect the order in which packets arrived, rather
  than the order in which they were last read. (Note, however, that this
  feature doesn't quite work correctly in the Win32 port (see README.win).
  One way around this would be to use PKZIP with the "-k" option; or just
  use the DOS port.) Inspired by Ingo Brueckl. At first I had this toggled
  by a keyword, but then...

- The complement to the new timestamp handling is the 'T' function in the
  packet window, which "Touches" a file, setting its timestamp to the
  current time. I needed this because I actually depend on the timestamps
  being updated sometimes.

- New "ExpertMode" option suppresses the help text, for those who are
  familiar with the commands and would rather use more of the screen for
  text. Four lines are gained in the packet, area and letter lists, among
  other gains.

- In a related note, you now can gain seven lines in the packet list by
  undefining VANITY_PLATE in config.h, but this is strictly a compile-time
  option. :-)

- OPX secretly restored. ;-)

### Bug fixes and such:

- Removed several older keywords to simplify the .mmailrc: BuildPersArea
  (even on my XT, it didn't really take much longer), MakeOldFlags,
  UseScrollBars, and AutoSaveRead (all these are now always on).

- The default editor for the Win32 port is now "start /w notepad". I'm not
  crazy about this, but under NT (in VMware), EDIT was completely locking
  up. Unfortunately MS provides no text-mode, native Win32 editor. (BTW, an
  interesting aside: Under NT, "notepad" is actually sufficient (the calling
  program waits for it to return); the "start /w" bit is for the benefit of
  9x, which otherwise launches notepad and returns immediately.)

- The Win32 port had trouble with the most recent Win32 version of PDCurses,
  because it now returns shift, alt and control immediately as keystrokes.
  (XCurses presumably had the same problem, but I didn't test this.) This is
  worked around now.

- SOUP (and BW v4): Newsgroup lines which exceed the width of the display
  now end in "..." to indicate a continuation. (You can see the entire
  "Newsgroups:" line by pressing 'X' for full headers.)

- SOUP (and BW v4?): Broken "References:" lines which contained no proper
  message ID's were causing segfaults. Reported by Peter Krefting. BTW,
  would the perpetrators of these broken messages please fix them?

- SOUP: In 'm' mode, checking for "From "-line dividers is a little more
  rigorous; the line must now also contain an '@'. This eliminated all the
  false positives I was seeing on Pine-generated mail folders.

- In packets where the list of subscribed areas is not known (e.g., all
  plain QWK and SOUP packets), the "Subscribed" mode in the area list is now
  skipped automatically.

- The default color scheme is now a little less day-glo, :-) and shows up
  better on some terminals. The old one is still available in tradit.col.
  Let me know what you think.

- Ncurses' built-in SIGWINCH handler is on by default in 5.0+; this was
  conflicting with MultiMail's handler. It should now work OK, but see
  NCURSES_SIGWINCH in interfac.h if you're not using ncurses' defaults.

- When going backwards through messages via '-' and backing out of an area,
  the display was not updated correctly. I've also changed the behavior of
  '-' in this instance to go back to the last non-empty group instead of the
  last group (more consistent with '+').

## 0.37 - 2000/06/28:

### New features:

- Moved web site and email from ClarkNet to SourceForge. Among other
  benefits, this means that old versions of the MultiMail source code are
  now archived online, going back to 0.1. Binaries (for certain platforms)
  from 0.36 on will also be archived.

- New compression type: tar/gz. (New .mmailrc keywords: "tarCompressCommand"
  and "tarUncompressCommand".) Unlike the other types, this recompresses the
  entire packet when updating the .red flags, so it can be a bit slow. Also,
  the supplied command lines assume GNU tar, which has gzip built-in.
  Separated gunzip/tar and tar/gzip command lines would require a (simple)
  external script. MultiMail only checks for the gzip signature. Requested
  by Peter Krefting for compatibility with GNUS.

### Bug fixes and such:

- The packet list could crash on directory names longer than 32 characters.
  Reported by Tuukka Lehtinen.

- Zero-length messages caused a segfault. Reported by T.L.

- In SOUP packets with index files, the .idx file would be opened instead of
  the corresponding .msg file. Reported (indirectly) by Peter Krefting.

- GNUS apparently uses a bogus identifier 'n' in the first position of the
  attribute fields of the AREA files in the SOUP packets it generates,
  equivalent to the standard type 'u'. MultiMail now recognizes this flag.
  Reported by P.K.

- In MakeChain(), rejoin is now always applied to non-quoted lines. This
  looks better in most cases; in particular, where space padding on the end
  of a line resulted in a line of exactly 80 columns. (Previous versions of
  MultiMail would print an extra blank line then.)

- relist() is now always called from MakeActive() in the area list and
  little area list. This means that the list is updated properly in Active
  mode, among other things.

- In the packet list search function, the wrong packet was highlighted.

- On some platforms (including the NetBSD m68k binary distributed on the web
  site), forced word-alignment of structs broke the "old-style" (.PDQ-based)
  offline config in Blue Wave mode. (Yes, I should've anticipated this after
  the similar bug with OPX mode in 0.32.)

- The signature-adding routine will now skip CR characters, so (in
  principle) a .sig could be shared between Unix and DOSish readers. Other
  text files should still be kept separate. Inspired by Martin Prieto.

- The backslashes that had briefly appeared in the DOSish versions' packet
  windows had reverted to forward slashes again in 0.36. :-)

## 0.36 - 2000/04/28:

### New features:

- The area list has a new mode, "Active", to accompany the existing "All"
  and "Subscribed" views. The Active mode lists only those areas that
  contain messages. The L key now cycles among all three modes. (Note that
  in some cases, two modes may be equivalent; e.g., in plain QWK packets,
  there's no way to distinguish Active from Subscribed.)

- There's also a new "Marked" view in the letter list. If any messages in
  the area are marked, the L key cycles between all, unread, and marked
  views. (Otherwise, it toggles all/unread, as before.) Marked messages are
  no longer automatically included in the unread view.

- In the packet and letter lists, the current sort modes are now displayed.
  And in the area and letter lists, the current mode is displayed. The
  number of files is shown in the packet list, but only if the total number
  of items (files + directories) exceeds the window length. The area and
  letter lists now work similarly, showing the number of items only when
  they exceed the window length.

- By popular demand, the default modes for the area list (all, subscribed,
  or active) and the letter list (all or unread) can now be set in .mmailrc.
  See the "AreaMode" and "LetterMode" keywords.

- Old-style Blue Wave offline config, using .PDQ files, is now supported.
  (.UPI/.NET replies still aren't, yet.) Requested by Russell Tiedt.

- Specifying a directory on the command line now opens the packet window on
  that directory. No more items are read from the command line afterwards.

- In Unix, the "~" character is now recognized as a synonym for the contents
  of the "HOME" environment variable in input, and is also used that way in
  the packet list display. (However, "~username" is not supported.)

- The Tab key works as an alternative to Enter in input windows.

- The BCC port is now the "standard" Win32 port. (The RSX/NT port is still
  available, renamed mmrsxNNN.zip.)

- New BeOS binary.

### Bug fixes and such:

- Makefile.tcc and Makefile.bcc are now sensible -- no more renaming or
  moving kludges. :-) Also, the "UNUSED_PARAMS" nonsense is gone, and
  MultiMail compiles without warnings under BCC.

- The message and ansi viewers can now handle > 64k in the 16-bit version,
  depending on available memory.

- In myreaddir(), the DJGPP, Turbo and Borland ports (mmdos, mmxt, and
  mmwin) now use findfirst()/findnext() instead of readdir()/stat(). This
  means that the packet window opens significantly faster on large
  directories. (stat() is fine in Unix, but slow in MS-DOS, where it's
  implemented via findfirst().) Also, the list is now built in a single
  pass, instead of one pass for files and another for directories, resulting
  in a speedup on all platforms.

- Test of read-only status now works in Borland/Turbo ports.

- Grabbing of Fidonet addresses was broken in some situations, causing
  segfaults. Reported by Greg Paski.

- When lines ended with spaces, they could be quoted incorrectly. Reported
  by Jim Hanoian.

- Tab characters in messages could cause segfaults in some cases.

- Soft CR stripping wasn't working.

- Looking through my (very) old packets, I found some in which another
  reader (?) had added its own files to a packet with the names "a0000.ndx"
  and "a0001.ndx", which made MultiMail generate a bogus area 0 for those
  packets. Fixed.

- The keypad mostly didn't work in the BCC (Win32) port of MultiMail.
  Reported by Jeff Foy.

- Using the Goto function in the packet list now puts the highlight bar on
  the first file, as when a directory is selected by pressing Enter. In Lynx
  mode, going left (back) in the packet list now actually goes to the
  previous directory, instead of the parent directory, and the previous
  highlight position is restored.

- When cycling through sort modes in the letter list, sort by "To:" is now
  skipped for areas which have no such field (i.e., Usenet areas).

- Wrapped header lines in SOUP are now displayed in the correct color.

- When writing out offline config (add/drop), the area list was scanned, but
  the current area number was not preserved. This sometimes led to minor
  cosmetic problems in the reply area. Reported by J.H.

- Finally replaced the ugly #define list in mmcolor.h with an enum.

- Some malformed Internet "From:" lines appear without a space between the
  name and address. In such cases, MultiMail was stripping the last letter
  of the real name.

- Several new error messages.

- The color files are now archived separately within the binary archives, to
  reduce clutter. Now if I can just figure out how to combine some of the
  documentation files in a sensible way...

## 0.35 - 2000/03/29:

### New features:

- None.

### Bug fixes and such:

- Oops! Due to the changes in the way LetterWindow::MakeChain() works, quote
  wrapping was broken. (Lines after wrapped lines would not be wrapped
  upwards, nor marked with quote marks.) A five-second fix, but alas, I
  didn't notice the bug until now.

## 0.34 - 2000/03/29:

### New features:

- Two new ports officially supported: An alternate Win32 port, via Borland
  C++ 5.5 (available free at the Borland web site); and, more interestingly,
  a 16-bit MS-DOS port, via Turbo C++ 3.0 (an ancestor of Borland C++ 5.5).
  I released an experimental version of the latter a couple weeks ago, but
  the official 0.34 version is much better, mainly in reducing memory usage
  and in not (always) giving up when memory runs out. :-)

- Areas that have replies are now always included in the short list, which
  prevents the replies being misdirected on re-edit. Such areas are also now
  flagged with an 'R' in the main area list.

### Bug fixes and such:

- The "References:" line disappeared from SOUP replies if they were
  re-edited before posting. Reported by J.B. Moreno.

- Massive reductions in memory usage for the LetterWindow and AnsiWindow
  classes. The plain message text takes up about half as much space as
  before; the ANSI viewer savings vary, but can be even greater.

- The environmental variable "TEMP" now works as an alternative to "TMP"
  with the DJGPP port. If neither of those is defined, nor "DJGPP", it will
  now use the startup directory instead of "C:\".

- TEMP or TMP values ending in a slash or backslash now work correctly in
  the Win32, OS/2 and 16-bit MS/DOS ports. Also, all these ports now use the
  startup directory rather than the MMAIL directory as the default location
  for the temporary directories and files, in the absence of a TEMP or TMP
  environment variable.

- SOUP replies sometimes had the wrong length in the length field (one byte
  too long), resulting in spurious characters at the ends of messages.

- Skip trying to add to read-only files. (But this check doesn't work yet in
  the Borland/Turbo ports.)

- References to "interface" in the code changed to "ui". (Apparently,
  "interface" is a reserved word in Borland C++.)

- Soft CR stripping moved to the Blue Wave class. Let me know if this is a
  problem. (I haven't seen them in QWK or OMEN packets, and they'll never
  appear in SOUP.)

- Various code cleanup. Now 16-bit clean, among other things. :-)

## 0.33 - 2000/02/21:

### New features:

- Support for encoding and decoding Quoted-Printable headers and bodies,
  primarily in SOUP packets. Decoding is always performed; encoding is
  performed subject to the new .mmailrc keywords "outCharSet", "UseQPHead",
  "UseQPMailHead", "UseQPNewsHead", "UseQPMail" and "UseQPNews". Thanks to
  Peter Krefting for some of the code.

- Support for the OPX format has been removed. I hope this will be only
  temporary. The reason is not technical. If you're affected by this, and
  you'd like to continue using OPX, please email me privately.

- Support for individual packet types may now be disabled when compiling, in
  order to save a little space in the executable. The packet modules to
  include are selected in the "modules" file.

- The Rename function in the packet list now brings up a Blue Wave-style
  default filename, with a numeric extension based on the last one found
  plus one, unless the packet already has a numeric extension. Also, rename
  failures are reported, and you can no longer rename to the name of an
  existing file.

- Some extra pop-up notices like "Opening...", mainly for the benefit of
  slower systems. :-) There are also additional non-fatal error messages in
  several places, as when a Save fails.

- .XTI support is now fully segregated into the Blue Wave module. This is
  cleaner, but it means that .XTI files are only recognized in Blue Wave
  packets, and not in other types. The default for the "MakeOldFlags" option
  in .mmailrc has been changed to "Yes".

- The automatic prefixing of "Re: " on the subjects of replies can now be
  disabled, for non-Internet areas only, via the "ReOnReplies:" .mmailrc
  keyword. By popular demand. :-)

- New color scheme contributed by Tuukka Lehtinen.

- Before the removal of the OPX module, these features were added:

- In OPX mode, MAIL.FDX is now handled in the same way as .XTI in Blue Wave
  mode. It's written instead of .red when "MakeOldFlags" is set.

- Offline config in OPX mode. Thanks to Armando Ramos for the format.

### Bug fixes and such:

- "To:" and "From:" kludge lines in text are now checked only in QWKE
  packets, instead of all QWK packets. This should help with some systems
  that require "To:" lines for Internet addressing.

- Blue Wave anonymous areas are now recognized as alias areas, as in QWKE.

- Areas flagged as read-only will no longer accept replies, and will pop up
  an error box instead. This works in Blue Wave, QWKE, and OMEN. Requested
  by Jaakko Lintula.

- The MS-DOS version sometimes segfaulted due to bugs in DJGPP's qsort().
  Fixed by upgrading to a newer DJGPP library. Reported by Laird Kelly.

- When reading the .mmailrc file, unrecognized keywords are now reported.
  May help to catch typos. :-)

- In OMEN mode, when the UserName was not set in .mmailrc, all messages were
  being flagged as personal.

- Defaults for "AutoSaveReplies" and "AutoSaveRead" changed to "Yes".

- Compiling on an Alpha revealed several bugs that didn't show up on systems
  where pointers and ints were the same size (i.e., all the 32-bit systems);
  mainly inappropriate usage of resource::get() vs. ::getInt(). MultiMail is
  now 64-bit ready. :-) Thanks to Compaq for the free account.

- In Blue Wave mode, the echotag field is now used as the area description
  if the description field was left blank. Problem reported by Greg Mayman.

- Internet address parsing modified to deal with badly-formed addresses like
  "(Name) <address>". Problem reported by Dane Beko.

- There were intermittent segfaults in the letter window with screens wider
  than 80 columns, due to an off-by-one error in memory allocation.

- The following fixes were made to the OPX module prior to its removal:

- Some versions of the Silver Xpress door eat the last character of the tear
  line. MultiMail now pads it out with a sacrificial space in OPX mode.
  Reported by Jim Hanoian.

- Some OPX packets split their areas into BRDINFO.DAT and EXTAREAS.DAT;
  MultiMail should now be able to handle this (untested). Reported by
  Armando Ramos.

- On some platforms (e.g., the NetBSD version distributed on my site), OPX
  support was not working due to structure alignment padding. Fixed.

- New line ending recognized: plain CR. (This is in addition to the LF,
  CRLF, and 0x8D endings recognized in 0.32.) If you got messages with blank
  bodies, or immediate segfaults when opening messages, this will probably
  fix it. Reported by Laird Kelly.

- Certain packets (with messages over 64k?) reportedly had incorrect values
  in the length fields of some messages, causing everything after that point
  to become unreadable. This is fixable by using MAIL.FDX to index the
  messages, which MultiMail now does. Reported by Armando Ramos.

## 0.32 - 1999/10/30:

### New features:

- Support for the OPX packet format. This was reverse-engineered, and has
  really only been tested with the WINS door. See mmail/opxstrct.h in the
  source code archive for the specs.

- A "Personal" area (messages addressed to you) is now created automatically
  for all packet types except SOUP. This can be turned on or off (default is
  on) via the "BuildPersArea" option in the .mmailrc -- except in QWK
  packets with .NDX files, where the presence or absence of a "personal.ndx"
  file determines whether the area is generated (the same as in older
  versions of MultiMail).

- With Blue Wave packets (and _only_ with Blue Wave packets), MultiMail now
  has the option (off by default) of storing its last-read pointers in an
  ".xti" file, as used by the Blue Wave reader and some compatible programs
  (like BWSave), instead of in MultiMail's native ".red" format. This is
  toggled by the "MakeOldFlags" option in the .mmailrc. (I made the name
  generic in anticipation of support for other such formats, like OPX's
  "mail.fdx".) In reading, .red no longer takes precedence over .xti; if
  both files are present, the one with the later date is used.

### Bug fixes and such:

- Character set translation now works correctly on Linux text consoles that
  use Unicode-mapped fonts. Problem reported by Peter Krefting. Also, OMEN
  replies to Latin-1 packets were not recognized as being Latin-1 on
  rereading; initial printing of translated fields in the header editor was
  incorrect; and the ANSI viewer always assumed CP437.

- Forwarded messages now add only the changed header lines to the body of
  the text, instead of using the same format as saved messages.

- Date in SOUP replies was being localized, which is undesirable. Reported
  by P.K.

- The Personal area now always shows the correct number of unread messages
  in the area list.

- Blank lines are now added automatically before signatures, and the sigdash
  ("-- ") in Internet and Usenet areas is correctly followed by a newline
  before a sig. (Previously, it worked right with taglines, but not sigs.)

- Areas with a very long description could cause a segfault when opening the
  letter list. (They were truncated, but not quite enough since the addition
  of the message count.) Also, the header of the letter list now takes
  advantage of the full width of larger screens.

- Can now read net-status QWK packets correctly, even without .NDX files.
  (End users shouldn't really be reading net-status QWK packets; but judging
  by a packet I was sent, some are.)

- Empty subject lines are now forced to the end of the letter list when
  sorting by subject, instead of messing up the sorting as they were doing.

- Precautionary fix for hypothetical corrupted Y2K date fields in Blue Wave
  packets. Hopefully not needed. :-)

- The User-Agent line in SOUP mode now includes "SOUP" in the comment. :-)

## 0.31 - 1999/10/07:

### New features:

- When a new version is run for the first time, instead of prompting whether
  to continue or quit, it prompts whether to edit the .mmailrc file or just
  continue. Should save a step. ;-)

### Bug fixes and such:

- Text files (e.g., MMAIL.RC, or the DOOR.ID or CONTROL.DAT from a QWK
  packet) which did not end in a line feed character would cause MultiMail
  to lock up. This was due to a new line-reading function introduced in
  version 0.30, which fixed some other problems, but stupidly added this
  one. Due to the seriousness of this bug, I'm releasing 0.31 early.
  Reported by David Pratt et al.

- Searching did not work in the little area list. (This dates to 0.29,
  though I just noticed it.)

- In SOUP packets, extra spaces between header keywords and values are now
  ignored.

## 0.30 - 1999/09/30:

### New features:

- Support for SOUP packets. Note that type 'M' areas and index files are not
  supported yet; only 'm', 'b' and 'B'.

- Support for OMEN packets.

- The new keywords "UserName" and "InetAddr" are used to build a default
  "From:" line for SOUP replies, of the form "UserName <InetAddr>". If you
  leave them blank, no "From:" line will be generated. (Conforming SOUP
  packers, like UQWK, will generate their own "From:" lines in that case.)
  The UserName is also used in OMEN mode for display purposes (the actual
  From name is set on upload), and for matching personal messages.

- Replies in Usenet areas may now be cross-posted; the newsgroups list can
  be edited.

- Quote headers can now be set in the config file (separately for Internet/
  Usenet areas, and others), via the "QuoteHead" and "InetQuote" keywords.
  The maximum width for quoted material can also be set, via "QuoteWrapCols"
  (suggested by Holger Granholm). See the man page for details.

- The "Lines:" indicator now includes a percentage.

### Bug fixes and such:

- Long lines in text files would sometimes cause the remainder of the file
  to be read incorrectly. Mainly, this could show up with the tagline file.
  Reported by Dane Beko. Also, blank lines in the tagline file are now
  ignored.

- Area 0, if present, was not being sorted in the letter list.

- In the MS-DOS version, the first shell-out would trash the old prompt, so
  second and subsequent shells had a bogus prompt. Reported by Jerel
  Arbaugh.

- When re-editing a reply and shortening it, the remaining text could end up
  off the screen when returning from the editor. Reported by Jim Hanoian.
  Also, a similar effect could be briefly seen when editing a reply from the
  original, if the reply was shorter.

- Text entry fields did not work correctly when backspacing if the text
  filled the field. Reported by Tom Rutherford.

- Changed default zip commands -- removed "-o" (for both PKZIP and InfoZip)
  and added "-k" for InfoZip. The latter option forces stored pathnames to
  an MS-DOS compatible 8.3 unicase format, which ensures maximal
  compatibility with doors and such. You may want to add this yourself if
  you're upgrading; but note that it could result in two ".red" files being
  stored into packets that had been read without this option.

- Saved messages can now have longer header lines, and the headers are more
  appropriate (closer to what you see in the letter window) for Internet/
  Usenet areas.

- Signatures and/or tearlines in Internet/Usenet replies are now prefaced
  with "-- ", and "... " is omitted. Signatures are recognized in text in
  these areas, are colored with the tagline color (I'll make this a separate
  color later), and are not quoted when replying.

- Long subject lines and other long lines can now be fully edited,
  regardless of screen width, and will be fully displayed if the screen is
  wide enough.

- In Internet/Usenet areas in Blue Wave packets, the subject, date and
  newsgroups are now extracted from the kludge lines in the text, as with
  references and message-id. (Most of the changes in this version of
  MultiMail are for enhanced Internet/Usenet support; although this was
  primarily for the benefit of SOUP, it carries over into Blue Wave.)

- TAB characters are now decoded into spaces in MakeChain(). This prevents
  them from pushing lines off the screen. But to save a message with its TAB
  characters intact, you have to save it from the ANSI viewer.

- Strip any number of leading "Re:"'s, not just the first.

- Filenames within reply packets are now created in upper case, even if you
  don't use the "-k" option (see above). Mainly this was for compatibility
  with the MBSE BBS, though there may be others with the same problem. (The
  format specs generally show the filenames in upper case, so this is
  arguably the correct behavior for a case-sensitive filesystem; but most
  were designed with the FAT filesystem in mind, and only SOUP explicitly
  addresses the issue of case.)

- "Re: " will not be prepended if it would make the subject exceed the
  maximum width for the format. Also, non-QWKE QWK packets now have their
  subjects limited to 25 characters (again); the "Subject:" kludge will not
  be added except in QWKE packets. (I'll add it back for some later, when I
  can identify the particular door's capabilities better.)

- ':' and '|' are now recognized as quote indicators, but only when
  appearing in the first column. (But if ':' is the start of a smiley, it's
  ignored.)

- When quoting in Internet/Usenet areas, blank lines now have a quote marker
  prepended, as this seems to be the standard.

- Intitial check for 80x20 instead of 60x20, error if screen too small.

- I made a (temporary) patch to PDCurses for the MS-DOS version, so that
  MultiMail will work correctly in non-standard video modes. Problem
  reported by J.A.

- Overdue documentation of the .mmailrc file in the man page.

## 0.29 - 1999/08/29:

### New features:

- List windows now have a "scroll bar" when the number of items in the list
  exceeds the number that will fit onscreen. This feature is selectable via
  the "UseScrollBars" keyword in .mmailrc (on by default). Note that it's
  not (yet) mouseable.

- The new "UseLynxNav" option (off by default) changes the function of the
  left and right cursor keys: left backs out, and right selects. (It's named
  after the Lynx web browser. The idea comes from Pine, which has a similar
  option.) It also makes the left arrow equivalent to selecting ".." in the
  packet list, except on the top level (where it's equivalent to Quit).

- Fido "SEEN-BY:" lines are now marked as hidden if they weren't already.
  (This allows you to turn on the "extended info" option in Blue Wave doors
  below ver. 4 with impunity.)

- The Delete key will work as an alias for 'K' in all cases.

### Bug fixes and such:

- Major bug: In certain cases, the little area list would not set the
  correct area, and the reply would be misdirected. Reported by Jerel D.
  Arbaugh.

- Outside of the packet/area/letter list, the search routine could abort in
  some cases (i.e., '/' would simply not work). Reported by Jim Hanoian.

- If a message was saved (from the letter list) before any messages had been
  viewed, it could be saved rot13'd!

- The "soft CR" filter was not working if the console character set was
  Latin-1.

- Re-editing of replies from the original area could move the letter list
  selection inappropriately (to the corresponding reply number).

- If the last-opened packet was deleted and replaced by another packet of
  the same name, the old packet would be "reopened" even though it was gone.
  Reported by Raymond Cool.

- Lines which contained a '^A' character, but _not_ at the beginning of the
  line, were erroneously being marked as hidden.

- "Re:" is now left visible in the letter window, though still stripped from
  the letter list. (In this, I emulate Tin.)

- During a search, the beep-on-personal would beep on each personal message
  scanned, even when the corresponding message was not actually displayed.

- When shelling out, the prompt string could be truncated if it was
  excessively long. Not really a bug -- I just hadn't believed that anyone
  would actually have a prompt string that long. :-) Reported by J.D.A.

- Due to its placement at the start of a line, an instance of the word
  ".mmailrc" was interpreted as a control code and disappeared from the
  formatted man page. Reported by Geoffrey Wilson.

## 0.28 - 1999/07/28:

### New features:

- Offline config! (Add/Drop only, at the moment.) For Blue Wave, QWKE, and
  QWK (with DOOR.ID indicating Add/Drop support). See the man page for
  details.

- The area list window now has additional status flags: '+' and '-' for
  added/dropped, and '*' in the full list for subscribed areas. The little
  area list has '*' also, and is now wider.

- A more advanced search routine. It will now (optionally) descend levels,
  allowing even a full text search over multiple packets.

- The address book now allows direct entry, as well as editing of existing
  addresses. The tagline window allows editing of existing taglines. (The
  old function of the 'E' key in the tagline window has been moved to the
  'A' key.)

- Reply splitting, both manual and (optionally) automatic.

- Quick exit from any screen via ^X.

- Command shell (for DOSish ports) via ^Z.

- Packets can now be specified directly on the command line, bypassing the
  packet menu. (If multiple packets are listed, they will be opened in
  sequence.)

- Better quote wrapping -- paragraphs are rewrapped, and second-level quotes
  are not requoted (except in Internet/Usenet areas, which use a reduced
  quote for second-level quotes).

- Optional stripping of "soft carriage returns" (those annoying accented i's
  that sometimes appear).

- Optional beep in letter window when opening personal messages.

### Bug fixes and such:

- The "Yes/No" prompt to keep old reply packets has been replaced by
  "Save/Kill", to reduce the chances of deleting a packet by mistake (as can
  happen when one is in the habit of hitting 'N' in response to the new
  files or bulletins prompts). Suggested by several users.

- In all string input windows (those that use ShadowedWin::getstring()), a
  backspace as the first character will now preserve the default text (if
  any). I'm not sure if it's better this way or not, though.

- The tagline window was displayed improperly on a screen wider than 80
  columns when scrolled up or down a line at a time.

- I've changed the message MultiMail shows the first time a new version is
  run, to something I hope is clearer. Please note that MultiMail will never
  wipe out the values from your old config file, only update the file with
  new keywords (if any).

- When changing to a new directory (or on startup), the first file rather
  than the first directory is highlighted.

- When composing a new message and not quoting, MultiMail no longer creates
  a 0-byte temp file before launching the editor. (You probably won't notice
  the difference, but I think it may address one bug report I got a while
  back. For me, it makes pico say "New file" instead of "Read 0 line".)

- Some more egcs warnings fixed. (Odd; they should have appeared earlier.)

- Internal reorganization: Most non-ANSI, non-curses code is now in
  mysystem.cc. I hope this may simplify porting to non-POSIX systems. Also,
  part of interfac.cc was split off into basic.cc; and some stupid #define
  and const int lists were replaced with enums.

## 0.27 - 1999/06/27:

### New features:

- The little area list now has short-list capability, like the main area
  list. Press 'L' to toggle it.

### Bug fixes and such:

- In QWK reply packets, the binary conference number was not being included.
  This made them incompatible with some doors (at least some versions of
  Galacticomm's software, and probably EzyBBS). The problem goes back to
  MultiMail's beginnings. I didn't notice it before now because most QWK
  doors use the ASCII conference number instead. (There are redundant fields
  in a REP packet.) Thanks to SparkAm@peyam.net for tracing the problem.

- The precompiled MS-DOS binary of 0.26 wouldn't work on machines without
  FPUs, due to the FPU code linked in with the difftime() function in the
  packet list. I've replaced this with an integral subtraction, which is
  adequate for my purposes. Reported by Greg Mayman et al.

- curs_set() is now called from Win::cursor_on() and Win::cursor_off(),
  regardless of the curses implementation. (Formerly, these lines were
  ifdef'ed.) This is for compatibility with ncurses 5.0-beta1, which no
  longer calls it from leaveok(). I'm told that Solaris curses doesn't,
  either.

- A netmail address on a message would be retained if the message were
  forwarded to a non-netmail area, and it would not be editable. Reported by
  Jim Hanoian.

- The packet list window length is now variable for lists shorter than the
  max, as with the letter list. The "info" window in the area list has been
  merged into the main window. (The visible effect of this is that the lower
  window no longer has a title.)

- Some internal reorganization.

## 0.26 - 1999/05/26:

### New features:

- Automatic saving of replies is now available via the "AutoSaveReplies"
  keyword in .mmailrc. When this is enabled, MultiMail automatically
  rewrites the reply packet after a reply is created, edited or killed. It's
  similar to pressing "F2" or "!" after each event, but without the warning
  window. I'm considering making this the default behavior for future
  versions -- any comments?

- The "AutoSaveRead" keyword turns on automatic saving of the last read
  markers when exiting a packet, bypassing the "Save lastread" prompt. (This
  is another thing I might make the default.)

- Packets may now be renamed from the packet list window by pressing 'R'.
  (This function can also be used to move them to different directories,
  though you must specify the filename as well as the pathname of the
  destination.)

- Directories are now shown in the packet list, and are navigable; or you
  can specify a directory to jump to via the 'G' command. (On the DOSish
  ports, the 'G' command is the only way to change drive letters.) The
  current directory appears as the title of the packet list window. Note
  that this change means that the old behavior of exiting when no packets
  were found will effectively never occur.

- By popular request, multiple replies to the same message (in the same
  reply packet) are now allowed. (This is a partial reversal of the change
  in 0.24.) When re-replying, you're prompted to re-edit; if you say no, a
  new reply is generated. Only the first of the existing replies will be
  recognized for re-editing.

- When opening a packet, you're now prompted whether or not to keep any
  existing replies.

- The tagline window can now be completely disabled via the "UseTaglines"
  keyword in .mmailrc. Requested by Jack Pfisterer.

### Bug fixes and such:

- Re-editing replies from the reply area no longer forces a return to the
  letter list. Instead, the re-edited letter is displayed.

- Cosmetic problems with the wrong area being displayed on the status line
  (and the header window) during the reply process have been cleared up.

- The "This will overwrite any existing reply packet" warning from the F2
  function is now suppressed if there is no packet.

- MultiMail will now display a warning if the reply packet is not created,
  or if the last read markers could not be saved. Also, it will pause for
  two seconds after getting an error code from a program it shelled to
  (archiver or editor) or attempted to shell to, so that any console error
  messages from the system may (hopefully) be read.

- Speculative fix for reported problems with replies disappearing (which I
  couldn't reproduce): calls to clearDirectory() now pass the name of the
  working directory explicitly, rather than ".".

- Added "-e" to the default add command for ARJ to suppress pathname
  inclusion. Suggested by Ken Whiton.

- The separate colors for the Search window have been eliminated, as the
  Save dialog is now used for both (as well as for the new prompts in the
  packet list).

- The "F2, !: Make reply packet" function is now available in the letter
  list and letter window, as well as the area window.

- Shorter date format in the packet list; more space for long filenames.

- On Blue Wave messages with no taglines, a blank line is now inserted
  before the origin line.

- Fixed errors (and some warnings besides) that made MultiMail 0.25
  incompatible with egcs. Thanks to Tony Summerfelt for reporting the
  problems and testing (and re-testing) the solutions.

- If there was a tagline in the message on screen, and you chose not to use
  a tagline in the reply, the tagline from the original would be used
  instead. Reported by David Toutant and J.F. (With the reorganized tagline
  code, I've also reverted to having the tagline grabber pick the last
  tagline in a message, instead of the first.)

- In Blue Wave mode, when the packet filename differed from the "base name"
  (BBS id), the former was used for replies, when it should be the latter.
  Reported by Jim Hanoian.

- After animating ANSI, MultiMail would loop on a non-blocking keyboard
  check, sucking up CPU.

- As usual, lots of internal reorganization.

## 0.25 - 1999/03/19:

### New features:

- Support for Internet and Usenet messages in Blue Wave mode. (Note: AFAIK,
  this is only supported by the Blue Wave version 4 door for PCBoard.) Also,
  Internet addresses can now be taken into the address book.

- Character sets (either code page 437 or Latin-1) are now selected for each
  area or message. The default character set is CP437 (as before), except
  for Internet or Usenet areas (as marked by Blue Wave or QWKE flags), which
  are Latin-1. The character set in individual Fidonet messages can be
  overridden by the "CHRS:" or "CHARSET:" kludges. Replies are set according
  to the default for the destination area.

- The console character set and the default sort types for the packet and
  letter lists can now be set in the config file. The default packet sort is
  now by time (latest first) instead of by name.

- The "To" field is now omitted from the letter list in Usenet areas and the
  QWK Personal area. The "From" field is omitted in the REPLY area. This
  leaves more room for the "Subject" lines by eliminating redundant info.

- Direct support for RAR archives. Note: there's a problem with this if you
  read the same packets in, e.g., both Linux and DOS: RAR will save the last
  read marker file twice (once in upper case, once in lower).

- More ANSI navigation: The ENTER key now works the same in the ANSI viewer
  as in the letter window (advance to next message).

- The packet list can now be rescanned (to pick up new packets) by pressing
  'U'.

- The message count now appears in the title bar of the letter list (like
  the area count in the area list).

- New color scheme by Gary Gilmore.

### Bug fixes and such:

- The alternate QWK private message flag, '+', was not being recognized.
  Reported by Tom Rutherford.

- Changed the message that prompts to save replies to something I hope is
  clearer. Suggested by Max Chamberlain.

- If the reply packet had a different archive type than the main packet,
  MultiMail would attempt to use *that* archiver (the reply packet's) to add
  the last-read markers to the main packet. The correct behavior is to use
  the main packet's archive type when remaking the reply packet!

- When quoted material was wrapped, the wrapped lines would have trailing
  spaces. These are now stripped.

- In the area and tagline lists, a completely blank line would sometimes
  appear at the top of the list. (A long-standing bug, finally fixed.)

- Strip blank lines after hidden lines. (Blue Wave puts blanks after the
  hidden headers in Usenet messages.)

- Fewer keys to hit in the header editor. :-) The cursor is now placed on
  either the Subject or To line, as appropriate (you can still arrow up to
  edit the other lines); and the "Make message private?" prompt is not
  presented when sending to areas that are either all-public or all-private
  (as indicated by Blue Wave or QWKE flags).

- Bizarre alignment bug in the EMX-based ports (OS/2 and Win32) caused
  crashes on some QWK packets. Reported by Jim Hanoian.

- Source code reorganized somewhat... no more .a files.

- Blue Wave packets could have identical areanums in multiple areas.
  Although this is an error, the Blue Wave reader handled it; now MultiMail
  does as well. This is also a little faster. However, it assumes that the
  mixRecords and INF area headers are sorted the same way, which I would've
  preferred not to assume. Problem reported by Scott Jones.

- In 0.24, the new packet kill routine failed to exit after killing the last
  packet, leaving garbage on screen. Reported by Gary Gilmore.

- A filename without an extension would mess up the display in the packet
  list. A long-standing bug that I never really cared about, but which J.H.
  mentioned.

- All directories are now omitted from the packet list.

- One more attempted cursor fix for the Win32 version.

- Minor display bug with messages 100,000 lines or longer. (Now OK up to
  1,000,000.)

- In the EMX ports, in the letter sort by subject, the secondary sort by
  message number was still broken. Reported by J.H.

## 0.24 - 1999/02/12:

### New features:

- "Save" function in ANSI mode. This differs from the letter window save in
  that no wrapping is performed, and no header is prepended. This is also
  the only way to save bulletins and new file lists.

- New navigation in ANSI mode: the space bar and left and right arrow keys
  now work in the same way as in the letter window. This also means the
  interface for the bulletin viewer is slightly different: 'Q' exits from
  the entire list, instead of just the current bulletin, and you can move
  back and forth between bulletins as in the letter window.

- Multiple sort modes in the packet list: by date (latest first), and by
  name. By name is still the default. "$" toggles between them.

- Multiple sort modes in the letter list: by subject (still the default),
  message number (i.e., no sort), from, or to. "$" cycles through them.

- The help window at the bottom of the packet, area and letter lists can now
  show multiple pages of options (similar to Pine's "Other commands" menu
  function).

- When character set translation is on in the ANSI viewer, some IBM
  characters are now mapped to curses equivalents, giving a better result on
  non-PC terminals (e.g., xterm, vt100). This works best with the box-
  drawing characters. The letter window still uses a plain ASCII mapping for
  these characters.

- Pop-up help is now available in the ANSI viewer, as in the letter window.

- Messages can be forwarded from any area, with the original headers
  preserved in the text.

- Support for the Win32 console via RSX/NT. See README.rsx if you want to
  compile for this platform.

- Fidonet MSGID/REPLY kludge lines are now supported, in Blue Wave mode.

- Additional QWKE support -- in QWKE packets, the short list now shows
  "subscribed-to" conferences, as in Blue Wave mode, instead of just the
  non-empty ones; and alias areas are supported. The "QWKE" type appears in
  the Info window of the area list.

- When Replying to a message that's already marked "Replied", the previous
  reply (if available) will be re-edited instead of a new reply being
  created.

- Some new color schemes.

### Bug fixes and such:

- The help window now survives a screen resize, instead of being closed.

- Killing a packet no longer forces a reread of the directory.

- The addressbook will no longer grab a new entry when no Fido address is
  available. Also, the addresses are now sorted alphabetically on startup.
  (Anything added during the session will not be alphabetized; however, the
  list will be sorted again on the next startup.)

- The full length of Blue Wave "To" and "From" fields is now available in
  the header editor. (Previously, they were restricted to 25 characters.)

- The subject sort in the letter list was not correctly performing the
  secondary sort, by message number, in runs of the same subject.

- Time/date printout code changed in packet list and in Blue Wave reply
  headers. I think this looks a bit better.

- The experimental Win32 console version had a problem with slow screen
  output. This seems to be a problem with the console API (?), but it's
  worked around in this version. (Normally, PDCurses checks for a keypress
  after printing each line. In Win32, this call takes a noticeable amount
  of time to return, even though it's supposed to be non-blocking. So, in
  MultiMail, the check is disabled for the Win32 version. This also disables
  typeahead, but I doubt anyone will even notice that.)

- A last attempt at fixing the remaining cursor problems in the PDCurses
  versions. (The cursor size is now checked at startup, and that value is
  explictly restored instead of using curs_set(1).) Scott Jones reported the
  persiting problem in the OS/2 version.

- The index of the Personal area is now updated just by entering the letter
  list, or anytime a message is read in that area. Better than previous
  versions, though still not ideal.

- Support for the keypad plus, minus, and slash keys under PDCurses. (This
  completes the keypad "Enter" fix in the previous version.)

- The experimental Win32 version supported only "\" in the pathnames
  specified in MMAIL.RC, where the DOS and OS/2 versions allowed either "\"
  or "/". Now both work in Win32, and both will be converted to "\" when
  MMAIL.RC is updated. Reported by Rafael Cresci.

- One more character allowed for unames in Blue Wave reply packets (six
  instead of five). Specifically, that means "MultiMail/MS-DOS" and
  "MultiMail/NetBSD" will now appear in Blue Wave tearlines, instead of the
  abbreviated form "MultiMail".

- Hidden lines at the end of a message would cause the line count to be over
  by one. Reported by Jim Hanoian.

- In the Save dialog, user-entered names were getting spaces converted to
  underscores, though only the second time through (when the name was pulled
  up as the default). Reported by J.H.

## 0.23 - 1999/01/22:

### New features:

- QWKE and PCBoard-style "Subject:", "To:", and "From:" line kludges are now
  supported in QWK mode, along with "Title:", which is used on WWIV. The
  QWKE "Subject:" line is generated automatically for replies, if needed.
  Note that in regular messages (though not in replies), these lines aren't
  parsed until the message body is accessed by entering the letter window,
  so the fields as shown in the letter list will at first be the short
  forms.

- Reply forwarding -- press \<CTRL\>-'F' while in the reply area (either the
  letter list or letter window) to forward a reply. (Forwarding of regular
  messages is not available yet.)

- In the REPLY area, 'R' now works as an alias for 'E'. Added at the
  insistence of Jim Hanoian. :-)

- When (re-)editing or forwarding a reply, the area can now be changed.

- REPLY and PERSONAL areas now show the original area (as well as the
  collection area) in the letter window. Suggested by J.H.

### Bug fixes and such:

- New behavior in the ANSI viewer: Instead of resetting everything when a
  screen-clearing code (<ESC>[2J) is encountered, it sets the last-drawn
  line as the new baseline, and continues from there. With the old system,
  information was sometimes lost (though it could still be viewed in the
  animation mode); now, screens are simply chained together, and everything
  is visible and scrollable.

- Characters 8 (backspace) and 12 (form feed) are now handled in the ANSI
  viewer, and skipped in the letter window. Ctrl-Z is stripped in the ANSI
  viewer.

- The BBS name and Sysop name fields in the info window of the area list
  were being unnecessarily truncated.

- In the PDCurses versions, the cursor remained disabled when shelling to an
  editor. Reported by Dane Beko. (Due to the way I implemented this fix,
  PDCurses 2.2 is no longer acceptable for MultiMail; you must use 2.3.)

- When creating a .REP, a zero-length message body would cause a segfault.

- Blank space at the end of the little area list is now omitted (as in the
  letter list).

- An attempt to send Netmail when no Netmail area is defined (as is always
  the case in QWK mode) now pops up a nonFatalError window.

- The "Save lastread pointers?" message now comes up less often; the "any
  read" flag is set less aggressively. (If you re-read a message that's
  already marked as read, the any-read flag will not be set, as it was in
  previous versions.)

- When entering areas which are fully read, the highlight bar is no longer
  moved to the last message. Similarly, if the entire packet is marked as
  read, the active area is not set to the last non-empty area, but the
  first. Suggested by J.H.

- Hopefully, a better subject-line sort in the letter list: If two subjects
  have the same content for the entire length of the shorter of the two, the
  shorter one is no longer automatically placed first; instead, they're put
  in message number order.

- The ENTER key on the numeric keypad did not work in the PDCurses versions.
  Reported by Russell Tiedt.

- Added "/m" to the parameters passed to LHA in the MSDOS version. Without
  this, it gave an "Extension is not .lha. Continue? [Y/N]" prompt when
  archiving replies.

## 0.22 - 1999/01/01:

### New features:

- The long-awaited support for new file lists and bulletins! They're
  displayed automatically on opening the packet. Currently, this is a bit of
  a kludge -- although I'm starting to like it. Memory usage is excessive.
  (See the man page for more info.)

- Support for XCurses (the X port of PDCurses). See README.xc for details.

- Added a line counter to the ANSI window, as in the letter window.

### Bug fixes and such:

- If a tagline was displayed on screen, it would replace the tagline
  selected for a reply via the tagline editor. This bug dates to 0.20.

- TAB characters that advanced past the end of a line were causing problems
  in the ANSI viewer.

- Aborting a netmail reply left the netmail address set when a regular reply
  was attempted afterwards.

- The translation toggle ('c') now works in all screens. (In particular, the
  ANSI viewer.)

- Proper printing of character 127 (DEL) under ncurses.

- The SIGWINCH (resize) handler now works acceptably even when a SIGWINCH
  occurs while in a WarningWindow() or getstring() call.

## 0.21 - 1998/12/15:

### New features:

- Not new, but newly documented: When run under Windows 95, the MSDOS
  version supports long filenames! Apparently this is a feature of the DJGPP
  standard library, though I didn't realize it before. (I don't know about
  Win 98 or NT -- anybody else?)

### Bug fixes and such:

- The code to generate the default tagline file was broken in 0.20, which
  meant that all first-time users got a segfault. Argh! Also, since I was
  messing with the taglines anyway, I changed the default list.

- In the PDCurses versions, the "Could not uncompress packet" and "Packet
  type not recognized" messages would pop up without first restoring the
  packet list screen. Also, some extra parentheses have been added around
  color names for the benefit of PDCurses/Win32 (still an incomplete port).

- Updated the README.{DOS,OS2} files to reflect the new style of default
  MMAIL.RC in use since 0.19.

- "/" and "." added to pop-up help window.

## 0.20 - 1998/12/06:

### New features:

- Search function. Case-insensitve searching is available everywhere. It's
  still a bit limited, in that it only works within the current list (or
  letter); i.e., you can't yet search multiple letters at once. Hit '/' to
  bring up the text entry window and start the search, or '.' to repeat the
  last search. (Yeah, I know -- it needs better keys.) Searching is from the
  current line on down.

- Fido "hidden" message lines (marked with a ^A) can be displayed; 'X'
  toggles this function.

- New features in the tagline editor and address book: New entries in the
  address book are checked for dupes; also, tagline dupes, which were
  already checked, are now reported. The address book and the tagline editor
  allow you to Kill entries. And the tagline editor can be brought up
  directly, via ^T, in the same way as the address book. Old features: The
  reLoad function has been removed from the tagline editor.

- Rot13 function in letter window -- toggle with 'D'.

- If a new letter is not edited (as measured by the time stamp), you'll be
  asked if you want to cancel it on returning to MultiMail. Partly inspired
  by Gregory Paksi.

- Redundant colors can be omitted from the ColorFile. See colors/README.col
  for details. Also, there are some new colors, and some old ones are gone;
  be sure to check your ColorFile if you've customized it.

- Messages to or from you are highlighted in a different color in the letter
  list. After Ingo Brueckl (though this implementation is a little different
  from his).

- Read-only support for Blue Wave's .XTI files (last-read markers). This
  means that any old packets you read with Blue Wave will be marked in the
  same way when first opened in MultiMail; however, any changes made in
  MultiMail will not be seen by Blue Wave. Partly inspired by I.B., but this
  is a different (and more correct) implementation.

- "Home" and "End" keys are now available in text entry fields (i.e.,
  ShadowedWin::getstring()). After I.B.

### Bug fixes and such:

- The FMPT kludge line is now supported, which means that in Blue Wave mode,
  the netmail addresses of points will be recognized.

- Aborting a header edit from the letter list could cause a segfault. (The
  fix in 0.19 was incomplete.)

- Some bogus ANSI codes (mainly, "ESC[?7h") are now semi-interpreted, so
  they no longer clutter the screen. Also, the ANSI background color is now
  hardwired to white on black, instead of being set by Main_Back.

- The highlight method for the active line was no good on a light background
  with ncurses 4.2 (was ok with 4.1). Some other changes for light
  backgrounds, too.

- High-bit, "low-bit" (below 32) and certain special characters are now
  handled better by MultiMail, being actually printed instead of interpreted
  as control codes. :-) Particularly useful for ANSI.

- TAB characters are now rendered as the appropriate number of spaces in the
  letter and ANSI windows.

- In text entry fields (getstring()), high-bit characters were showing up
  with weird attributes (due to a sign error). Reported (indirectly) by
  I.B., this bug has been present since about 0.10! I'm suprised no one from
  Fido zone 2 mentioned it to me before.

- Packets can now be renamed without MultiMail losing track of its last read
  markers. (This will, however, still result in a second .red file being
  created.)

- When entering a tagline manually via "E" in the tagline editor, the
  entry field is now placed correctly, instead of appearing to overwrite the
  last tagline. Also, bogus taglines are no longer generated from message
  lines which are just "...".

- In the Reply area, the help menu for the letter list was showing a 'K'
  where it should've been an 'S'. Also, capitalization in help menus has
  been standardized (only the keys that activate commands are in caps in the
  descriptive text), and the pop-up letter help window is now in two
  columns.

- Killing an item (in any menu) now moves down to the next entry, regardless
  of the position in the list (unless at the end).

- The 'L' command now remains available in the address book after a screen
  resize (SIGWINCH). Also, taking an address via 'L' automatically sets the
  active line to the last position (where the new entry is).

- Netmail addresses are now included in Saved letters.

- The resize (SIGWINCH) handler was causing a segfault in some
  circumstances. Although I just noticed it, this bug dates to 0.18.
  Curiously, it occurred for me only when running under "screen". The fix
  was to change Win::inkey() to remove the loop.

- Changed the .mmailrc separators from " = " back to ": ", which makes
  them compatible with 0.18 and earlier. I'll probably change them again. (I
  was trying to achieve a more "classic" style of .rc file, but in fact,
  it still wasn't quite right.)

- The cursor was not being disabled in PDCurses versions.

- "Read" indicator in the letter window was not updated after Saving.

- Changed interface/Makefile and mmail/Makefile to allow "make clean" to
  work in DOS. Suggested by I.B.

- And of course, various internal changes.

## 0.19 - 1998/10/25:

### New features:

- The .mmailrc has been redesigned. New versions of MultiMail will update it
  automatically; comments will be lost, but old data will be preseved. Note:
  the new form is not readable by 0.18 or earlier, because of the use of '='
  as a separator. Partly inspired by Ingo Brueckl.

- Non-fatal errors. Currently, this is used only for the previously fatal
  "Could not uncompress packet" and "Packet type not recognized".

- You can change the colors MultiMail uses without recompiling. See the
  automatically generated "~/colors" for details; also, some sample color
  schemes are included in the 0.19 archive. This feature is due largely to
  Ingo Brueckl.

- "Marked" messages are kept in the active letter list, whether read or
  unread. In combination with the "Save" changes (see below), this means
  that marking is now actually useful. :-)

- Extensive changes to the "Save" dialog: When you Save from the letter
  list, you're given a choice of "All", "This one", or "Quit"; if any
  messages are marked, you also get the option "Marked". Saving "All"
  now saves all messages in the active list, rather than all in the area.
  (To get the old behavior, just toggle the full list on first.) Saving a
  message sets the "Read" flag, and turns off "Marked". The last-entered
  filename is retained (separately) for "All", "This One", and
  "Marked". If no name is entered manually, the automatic name is
  regenerated with each use; otherwise, the manual name is kept until you
  exit MultiMail.

### Bug fixes and such:

- Segfaults in saving All, in some cases.

- Certain ANSI pics, with codes in the form "<ESC>[;27H" (i.e., with
  an empty parameter before a semicolon) were causing segfaults.

- After the cursor was turned on, e.g. by the Save window or an aborted
  message header edit, it was left in the middle of the screen on some
  terminals. It is now forced down to the corner.

- The header editor was being left on screen after exiting via ESC.

- Removed the text "Fatal Error" from fatal errors. :-) It was sometimes
  redundant, and other times wrong.

- When the last packet was deleted from the packet list, a segfault could
  occur. Reported by Alan Ianson.

- Functions which redrew the letter window (e.g., toggling character set
  translation) were setting the Read marker each time.

- The tagline window now looks better on screens other than 80 columns.

- Various internal changes, and added comments.

## 0.18 - 1998/08/14:

### New features:

- MultiMail can now read QWK packets without .NDX files. Partly inspired by
  Simon Callan. Note: It's still preferable to include them, since it takes
  about three times longer to open the packet without them. (But that's not
  counting the unpacking time, which is much longer still.)

- The letter list now allows toggling between showing all messages, and
  showing only those which are unread; when entering an area, it defaults to
  unread (unless all the messages are marked read). I've found that this
  makes a BIG difference in the feel of the program -- it's more like a
  newsreader now. ;-) Use the 'L' key to toggle between the long and short
  lists (as in the area list).

### Bug fixes and such:

- Removed a lot of redundant code from the interface section, and
  reorganized it... There are many new features that need implementing, but
  so far I've been concentrating on cleaning up and simplifying the existing
  code, so as to have a solid base to build on. I think I'm almost there.
  ;-)

- Found a couple small memory leaks, in AnsiWindow (the statbar was not
  being deleted) and main_read_class. Also, the tagline file was being left
  open after reading it.

- Now gives a fatal error (instead of segfaulting) if the screen is smaller
  than 60x20.

- The address book and tagline window now respond correctly to SIGWINCH.

- In the tagline window, the key for rereading the file has been changed
  from 'F' to 'L'. This allows 'F' to be used as an alias for PgDn, as on
  other screens. (The real purpose was to merge the code into the rest of
  the keyboard-handling code.)

- If there was only one area (i.e., REPLY), and the right arrow was pressed,
  an infinite loop would occur. Reported by Tamminen Eero.

- The 'N' key, for Netmail, is now disabled when no Netmail area is
  available. Partly inspired by Francois Thunus.

- Sample filenames in the default .mmailrc now conform to the OS (i.e., 8.3
  (FAT) format for DOS and OS/2), and the unused "ReadDir" line has been
  removed. Inspired by F.T.

- Stripping and adding of blank lines at the end of messages works a little
  better now, but still needs work.

- The addressbook was crashing, when empty (0 items). Reported by Marc D.
  Williams.

## 0.17 - 1998/07/06:

### New features:

- Netmail addresses, when present in Blue Wave packets (or reply packets),
  are displayed in the From: or To: fields in the letter window, as
  appropriate; and when entering a netmail message, the address can now be
  edited. (Note: Netmail is largely untested yet.)

- In the header editor (From, To, etc.), you can now use the up and down
  arrows to move between fields, or press ESC in any field to abort the
  edit. Press ENTER on the last field to exit normally.

- Reading a message in the QWK Personal area marks it as read in its
  original area.

- A full area list is now available in both QWK and Blue Wave modes; it can
  be toggled by pressing 'L' in the area list. (The compile-time
  "shortlist" definition has been removed.) One benefit is that you can
  enter a message in any area, even when only the short list is being
  displayed.

- When re-editing a message, you can now edit the header as well as the
  text.

- ANSI animation. While in the ANSI viewer, press one of the ANSI activation
  keys again (or 'A') to see an animated view. Press any key to abort the
  animation.

- The ANSI viewer supports the screen-clearing code.

- The cursor is turned off, wherever possible. Less visual clutter. :-)

- True scrolling instead of redrawing; minimized the redrawing done for
  letter window, ANSI viewer, and all ListWindows. It's now MUCH faster on
  slow machines and slow terminals.

### Bug fixes and such:

- MASSIVE rewrite... Almost everything that was crufty in previous versions
  is now done the right way. :-) General fixes include: plugging memory
  leaks (there were a lot of these, I'm sorry to say), elimination of
  one-based arrays, adding more limit checks, and removal of all kinds of
  kludges and redundant code. The interface is more fully separate from the
  specific drivers; adding new packet types now requires changing only
  mmail/driverl.cc.

- The netmail area is found by attribute rather than name, and (owing to the
  full area list now available in Blue Wave mode) can always be found,
  instead of only when you have received netmail. :-)

- Character set translation is applied to the area list, and to area
  descriptions in the letter list and letter window.

- The number of replies shown in the REPLY area is updated immediately when
  it changes.

- The method of adding blanks before taglines and tearlines is changed; it
  should no longer be necessary to type an extra CR at the end of replies.

- QWK replies are automatically word-wrapped at 80 columns, if they're not
  wrapped already. (In Blue Wave, this is not desirable. QWK doors seem to
  prefer individual lines; Blue Wave, paragraphs.)

- MultiMail now ensures that QWK replies end with a line-ending character,
  instead of letting the last line run off into the padding area. Without
  this, certain QWK doors would strip off the tearline.

- The path is no longer displayed in the Save window, and the suggested
  filename is conformed to FAT (8.3) standards. Note that you can still
  enter any pathname, and any filename that will be accepted by your system.

- Specifying pathnames that end in a slash or backslash (e.g., in .mmailrc)
  should now work correctly.

- The extraneous "bw" prefix found on many of the .mmailrc variable names
  is no longer needed, though it will still be recognized for backwards
  compatibility.

- Space bar now works in the little area list.

- The QWK "Personal" area no longer appears in the little area list, nor
  can messages be entered in it from the area list.

- Unrecognized packets no longer cause a segfault (just an exit).

- Added trivial SIGWINCH handlers for AddressBook and TaglineWindow (they
  just exit that menu).

- Fatal errors are now reported correctly in the OS/2 version, even when
  they occur before curses initialization.

- In the ANSI viewer, there are no more segfaults in OS/2, and no more stray
  characters on the status line in either PDCurses version.

- ANSI Reverse attribute now works with PDCurses.

- ANSI viewing works in reply area.

- A SIGWINCH can no longer result in the active (highlighted) line being
  displaced off the screen.

- New default LHA parameters for MSDOS version (the Unix ones didn't work
  for it).

- The currently selected address is preserved between calls to the
  AddressBook.

## 0.16 - 1998/05/28:

### New features:

- This version compiles for OS/2, with EMX. This entailed substantial
  changes to the Makefile (q.v.), as well as some code.

- The environment variable MMAIL can now be used instead of HOME, to specify
  the directory of the .mmailrc (or mmail.rc) file. If neither variable is
  defined, MultiMail will use the current directory (this is also new).

- The DOS-to-Latin 1 character table has been improved, for translation of
  graphics characters, by stealing most of the table from DOSEmu.

- Truly automatic packet recognition, by packet contents instead of name.
  Patch by Robert Vukovic.

- Internal ANSI viewer. Works on all platforms (except that it sometimes
  segfaults when scrolling, under OS/2). Much better than the "less"
  viewer, and it will form the basis of new file list and bulletin
  viewers.

### Bug fixes and such:

- Another big bug in the DOS version (argh!): Last read markers were not
  being saved. This bug was the result of an error in the bug fix in 0.15.
  :-/ I'm surprised no one has reported this.

- In the previous DOS versions, under some arrangements of directories, the
  temporary directories would not be removed.

- The man page has been renamed to "mm.1", and the title changed, so that
  "man" and "apropos" will work more appropriately. The install will
  make a link to the old name (mmail.1).

- The "Replied" flag is now set by O- and N-type replies, as well as R.

- Some code reorganization.

## 0.15 - 1998/05/12:

### New feature:

- If you back out from a packet, to the packet list, you can now reselect
  the same packet without it being decompressed again. Thanks to Robert
  Vukovic for convincing me of the need for something like this.

### Bug fix:

- In DOS, the default editor (edit.com) didn't actually work, because it
  didn't understand paths with slashes instead of backslashes. I missed this
  because it worked with Qedit. :-) The slashes are now flipped on the
  pathnames passed to external editors and archivers (in DOS only). Thanks
  to kifox@geocities.com for reporting the problem.

## 0.14 - 1998/04/25:

### Bug fix:

- A more subtle line-ending bug... under MSDOS, extra characters were
  sometimes added to the end of a reply. (Unix versions were not
  affected.)

## 0.13 - 1998/04/24:

### Bug fix:

- While making changes to accomodate MSDOS line endings, I made a small
  oversight that caused replies to be truncated at one character if they
  were re-edited.

## 0.12 - 1998/04/23:

### New features:

- Compatible with MSDOS. All source code files have been changed to
  single-case, 8.3 form, and #ifdef's are used on filenames internally where
  necessary. (Most other issues are taken care of by DJGPP, though some
  Makefile changes were necessary, and the starting directory is now
  restored on termination -- needed in DOS, but not in Unix.)

- Compatible with PDCurses (as distributed with DJGPP), and SysV curses
  (specifically, Solaris). Note that the shadows on windows are opaque if
  you compile with SysV curses. (I also added "#define USE_SHADOWS", which
  you can comment out or remove to get rid of the shadows
  altogether.)

### Bug fixes and such:

- After the reorganization of resource.C in version 0.11 (if not before),
  any change to the value of mmHomeDir in .mmailrc would leave the
  bwPacketDir, bwReplyDir, etc. variables unaffacted.

- memError() now works correctly, even before initialization of the
  interface. Fatal errors in general will be reported better in this
  version.

- Some additonal bounds checking on sprintf() calls.

- tmpnam() checked. In principle, as few as 26 temporary filenames might be
  available from it (which should still be enough, unless you write a whole
  lot of replies).

## 0.11 - 1998/03/21:

### New features:

- Area and system descriptions added to saved messages.

- I removed the last remaining command-line option, "-m", on the grounds
  that it was useless. (This is a new UNfeature.) After testing it on my
  9600 bps terminal, it doesn't appear to improve the speed; and the
  alternate color scheme, which it was originally designed to select, was
  never implemented. (Instead, I've added inversing to the top and bottom
  bars in the letter window, and made a few other changes to make it more
  monochrome-friendly.)

### Bug fixes and such:

- resource.C and resource.h rewritten and simplified to allow compilation
  with gcc 2.8.1. (It's not yet clear to me why the old version didn't work,
  but this is better anyway.) There are still a few warnings, but it works
  OK.

- When entering the From:, To:, and Subject: on replies, the full width of
  the fields had not been available. Under some circumstances, this could
  even cause a segfault. These lengths still need to be checked more
  stringently.

- Automatic "Re:" adding now takes place before subject-line editing,
  instead of after. This allows users to see that it will be added, and to
  override it if desired. (It also saves a few bytes of code!) I don't know
  why I did it the other way before.

- In the event of a "Fatal Error:" exit, MultiMail will now clean up after
  itself, as with normal exits. Also, failed memory allocation is now
  explicitly checked.

- Default paths for "zip" and "unzip" removed. (These would only show up
  if the paths were not defined in the .mmailrc -- as they are with the
  default .mmailrc.) Thanks to Carey Bloodworth for pointing this out.

- If the message numbers exceeded 5 digits (i.e., 100000+), they would mess
  up the display in the letter list. Now, it takes 6. :-)

- Much internal reorganization.

- Fixed a bug with my website -- the new-style URL (/~wmcbrine/) messed up
  some relative pathnames. :-)

## 0.10 - 1998/03/07:

### New features:

- Shadowed windows! Tell me if you like them.

- SIGWINCH support. You can now resize the terminal (e.g., maximize the
  xterm) while MultiMail is running, and it will adapt to the new
  size.

### Bug fixes and such:

- Under Solaris, the help menu area was not being cleared when changing from
  one menu to another.

- One more space available in letter list (now consistent with the other
  lists).

- On some systems (such as Linux w/ glibc, and NetBSD), if you attempted to
  read a packet that didn't already have a "bbsid.red" file (mm's read
  markers) in it, MultiMail v0.9 would segfault right after unzipping a
  packet, due to a very stupid attempt to call fclose() with a NULL pointer.
  Under Linux w/ libc.5, this actually worked OK; and I didn't notice it on
  my NetBSD test system because the packets there already had .red files in
  them. Thanks again to Cesar Cardoso for reporting the problem.

  Due to the seriousness of this bug, I'm releasing v0.10 early.

## 0.9 - 1998/02/26:

### New features:

- Added alias, "!", for F2. Added Tab as an alias for right arrow (next
  unread) in letter list.

- Better handling of screen widths other than 80; better use of available
  screen space even in 80 columns. Still to do: handle SIGWINCH.

- QWK now has the option (on by default) to show only those areas which have
  messages in them, instead of the full area list. I set this on by default
  to match the behavior of the Blue Wave side; you can change this in the
  top-level Makefile. Currently, it's only a compile-time option. (In the
  future, I'll add the ability to do a full list in Blue Wave mode, and to
  toggle the mode at runtime.)

- .REP and .NEW filenames are now forced to lowercase. Should be easier to
  type. :-) But if you have any uppercase-named reply packets from previous
  versions, you'll have to manually rename them before 0.9 will recognize
  them. Sorry.

- Blue Wave mode now works on big-endian systems! The full functionality of
  MultiMail is now available on all platforms where it compiles. And
  "-fpack-struct" is no longer needed in the Makefile -- which I hope may
  mean increased portability.

- system() calls to rm and sed have been eliminated.

### Bug fixes and such:

- Strip spaces from Blue Wave subject lines; fixes sorting in some cases.

- In Blue Wave mode, MultiMail was using LF as a paragraph delimiter. The
  correct behavior is to use CR as the delimiter and ignore any LFs. Thanks
  to Marc D. Williams for submitting a packet that required this fix.

- Messages in Blue Wave packets are supposed to have a leading space, but
  packets produced by the ReneWave door lacked them. They also contained
  nulls in messages (a no-no). MultiMail now deals with these problems
  without flaking out. Thanks again to M.D.W.

- With Blue Wave packets, MultiMail now scans for "*.inf", instead of
  assuming that the packet name minus the extension is the basename.
  Normally, that is the case, but the "welcome!.000" packet that comes
  with the Blue Wave reader -- which uses "welcome" internally -- is a
  counterexample. MultiMail can now read this packet. :-)

- Startup for QWK packets is much faster, especially on slow systems.
  Previous versions would attempt to open the .ndx file for each area
  defined in the control.dat (and would do so several times for each area),
  whether it existed or not; 0.9 scans to see which .ndx files actually
  exist first.

- Changed ANSI viewer to work better with certain messages. Really, I should
  make it user-definable, instead of being hard-wired to "less"; but I'm
  probably going to make it into an internal function anyway.

- Added "#include <sys/types.h>" to mmail/mmail.h. Usually I wouldn't
  mention a change of this type, but in this case, it was done to get
  MultiMail to compile with glibc (libc 6). Thanks to Cesar Cardoso for
  reporting the problem and testing the solution.

- Saved messages are now wrapped at 80 columns, regardless of screen width
  at the time of saving; and the date is now added to the saved header.

- Replying to a message no longer messes up the right margin of the original
  when viewing it immediately after replying.

- Paths are no longer stored with the .red file when using LHA. In previous
  versions, this could cause the storing of multiple .red files into a
  packet.

- Next/previous unread in letter list now work correctly, even with messages
  that have manually been marked Unread.

- Miscellaneous minor internal fixes and optimizations.

## 0.8 - 1998/02/10:

### New features:

- "Re: " is stripped from subject lines, for sorting and display purposes,
  and added automatically on replies (unless doing so would truncate the
  subject). Subject sorting is now case-insensitive.

- Letter window now displays "bbsnum (x of y)", for consistency with the
  letter list and to provide more information.

- Slightly expanded the area description length to make better use of the
  available space. Also, in the letter list, more of the subject is shown.

- Restored the "line/lines" counter found in early versions of MultiMail.
  This shows the length of the message in lines, and the number of the top
  line on screen.

- Temporary files are now cleared at the end of a session. Also, since
  MultiMail now generates a unique temporary directory for each session, a
  single user can run multiple concurrent sessions. (Just don't try to read
  the same packet in each one!)

- System uname added to Blue Wave tearline (if it will fit).

- Character set translation can now be toggled at runtime, by pressing 'c',
  instead of at compilation time.

- Packet type is now recognized automatically, based on the filename's
  extension. (You can still force the other type.) Consequently, the "-b"
  and "-q" options have been removed.

- The Blue Wave area list now uses the description instead of the echotag.
  This is much more useful, and conforms to the Blue Wave reader.

- The number of the original message is now passed to the door for reply
  linking.

- In the letter window, the top and bottom bars are now inversed when in
  monochrome. In the various lists, the highlight bar is now drawn with
  stdout(), for greater contrast.

- Many changes to the top-level Makefile; it's now more portable, and
  commented. You can now set the location of the ncurses header file here,
  instead of editing the source.

- The packet list is now sorted, and shows file sizes as well as dates.

- The backquote character (`) is converted to an ESC when using the ANSI
  viewer. (Some systems recode ESC characters this way.)

- You can now Kill packets from the packet list.

### Bug fixes and such:

- If all preexisting replies were deleted, attempting to create a new reply
  during the same session could cause a segfault.

- Terminal newlines stripped from replies. Conforms to the Blue Wave reader;
  suppresses gaps after the tagline with some doors.

- QWK subject fields had been truncated at 24 characters. (The field is 25
  chars.)

- The tagline file can now be hand-edited without introducing blank lines.

- In the letter window, PgDn, End, and the down arrow now stop at the actual
  end of the text.

- No more extra junk in Blue Wave reply packets.

- Blue Wave replies can now be safely reedited. (Previously, the line
  endings could be messed up -- left in Unix format.) Stray characters no
  longer appear at the end of Blue Wave replies while viewing them.

- Blue Wave mode, like QWK mode, now shows the BBS message numbers in the
  letter list, instead of the messages' position in the packet.

- Trailing ", Sysop" stripped from sysop name in QWK mode.

- Opening reply packets that were generated by the Blue Wave reader caused a
  segfault, due to case mismatch; it now works correctly.

- Version number "encryption" for Blue Wave replies fixed (so the number
  appears correctly in tearlines). (IMO, the Blue Wave specs are in error in
  describing this feature -- bluewave.h refers to addition when it should
  say subtraction.)

- Left and right arrow keys in the area list now work much faster when
  skipping empty areas, and can take you to the first and last areas,
  instead of second and next-to-last.

- Killed the stupid repeating-REPLY-area bug in Blue Wave mode.

- When creating Blue Wave replies, MultiMail now makes the proper choice
  between "real name" and "alias", depending on the area flags.

## 0.7 - 1997/12/07:

### New features:

- Right and left arrow keys now select next/previous unread message in an
  area, similarly to the way they function in the area list (jumping to
  non-empty areas).

- ANSI viewer. Hit ^A while reading a message to view it in color, if it has
  ANSI codes embedded. This is still rudimentary; it uses "less" as the
  viewer, and it depends on the terminal to interpret the codes.

- Private flag support. Complete, except for Blue Wave area flag checks.

- Character set translation is essentially complete. The only further
  changes I envision are the ability to turn translation on or off at run
  time, instead of at compile time; some possible changes to the translation
  table; and maybe additional character sets.

- Stolen taglines are checked for dupes, included only once.

- With some minor changes, I got it to work under SunOS (Solaris). No longer
  just a Linux program! :-) So, the tearline is now derived from the uname.
  Blue Wave mode still requires a little-endian system.

- QWK "Personal" conference.

- Many key aliases added, mainly for use on terminals that don't support
  keys like PgDn and F1. Also, Space Bar now functions as a combination
  PgDn/Enter in the letter window, to allow paging through a conference.

- Marking and read/unread toggle now work from the letter list, simplifying
  bulk marking. In the REPLY area, Kill now works from the letter list.

- Automatic creation of .mmailrc and the mmail directories; no more "make
  install_dirs".

- Changed bluewave.h to version 3. (No related feature changes yet.) I now
  use it in unmodified form; "-fpack-struct" is sufficient.

### Bug fixes and such:

- Suppression of "hidden" text lines added for Blue Wave (already present
  for QWK).

- Append saved files instead of overwrite.

- If saving without a path specified, save in the "save" directory.

- Better adaptation to nonstandard screen sizes.

- Really random taglines (previously, there was no call to srand).

- "Save lastread pointers?" and "Reply area has changed..." messages now
  come up only when appropriate.

- "Personal" column in area list removed in QWK mode. Maybe not a bug, but
  it was unused.

- Fall back to login name if no alias name defined. (It was using only the
  alias name, sometimes leading to blank From: lines in Blue Wave mode. This
  feature needs more work -- the alias should not always be the default.)

- Various date fixes (QWK and Blue Wave).

- Print the right area type for QWK Replies.

- Area names padded out with spaces when necessary to correct a cosmetic
  defect in the REPLIES/PERSONAL letter lists' "Area" fields.

- Version number references made consistent.

- Remove extra bytes from ends of messages (QWK and Blue Wave).

- A big one: Kill the *correct* reply messages with 'K'. (!)

- A BIG one: QWK reply area numbers fixed. It was using the internal area
  number, rather than the QWK number; so replies would go to the wrong
  areas! (Under specific conditions -- a packet with conferences that were
  numbered serially, starting from zero -- this would actually work right,
  which is doubtless how the bug snuck in to begin with.)

- Stop truncating replies. (This bug complimented the extra byte bug,
  preventing segfaults in the old version.)

- I changed the default directories from "bwdown", etc., to "down", etc.
  This wasn't a bug, but it was too Blue Wave-centric for a dual-function
  reader. (I believe the original intent of K.T. & T.I. was that the QWK
  implementation would have its own directories, e.g., "qwkdown";  but as
  implemented by J.Z., a common directory was used. I may revert to the
  putative original design at some point. Internally, the "bw"  prefix is
  still used on many shared structures.)

- Make .REP packets from the BBSID, not the base packetname.

- "Unread" now counts all messages marked unread, not just those which are
  also unmarked and unreplied.

- Letter sort fixed (now sorts by number within each subject), and faster.

- Eliminated the defaulting to "reply" when an otherwise undefined key was
  pressed.

- Calls to todos replaced with internal code.

- QWK .ndx parser replaced with faster, non-endian-dependent version.

- Many ncurses changes. Most importantly, shells and (normal) exits now
  restore the screen mode. (Error exits still need fixing.)

- Makefile changes (including centralizing options in top-level Makefile).
  Could do with a bit more changing, I think.

- A big one (since it prevented me from even using 0.6, as it was): Fixed
  segfaults on opening packets with uppercase names within (i.e., those from
  most or all DOS-based BBSes).

- Many minor changes to suppress warning messages during compilation.

- Many, many more. :-) These are just the user-visible ones.

### Bugs unfixed:

- The lockup-on-exit bug, described below as having appeared in 0.3 and
  disappeared in 0.4, has resurfaced. I too am unable to trace it. It can
  come or go after almost any random change in the code.

-- William McBrine

## 0.6a - 1997/03/25:

- Oops! The signature was in the wrong place. Right order is: signature,
  tagline, tearline ;-)

- Tagline adoption is supported! (Doesn't check dupe tags yet.)

- QWK-reply packs contained '\n' as a line terminator. It's incorrect! We
  have to use softCR (char#227).

- Character conversion is somewhat in! For ISO 8859-1 <--> CP437 (DOS)
  translation, #define ISOCONVERT in /interface/interface.h

- ISO conversion doesn't do the from/to/subj yet

## 0.5a - 1997/03/22:

- Fixed another date bug (when reloading QWK replies, the date would be
  mangled).

- You can now use a signature file after each letter (specify its filename
  in .mmailrc)

- Says error, if ~/.mmailrc isn't found. (The program needs this file!)

- File open errors printed, inside a BW/QWK packet, it tries four variations
  of the filename (eg. mybbs.dat, MYBBS.dat, MYBBS.DAT, mybbs.DAT).

- The annoying bug, which occurred when quitting, has disappeared!
  ;-o

## 0.4a - 1997/03/12:

- Fixed the date handling with QWK packets. Should do it well. That part
  wasn't even implemented before.

- Colors should be fine now, everywhere.

- One small, but ANNOYING bug introduced: the program doesn't exit properly,
  sometimes you have to kill it! Sorry, couldn't trace this bug yet. Maybe
  you can help.

## 0.3alpha - 1997/02/16:

- Took out many more bugs. This version now is almost usable ;)

- You can now (re)Edit your reply!

- Major design and color changes... Still not done, but doing good!

- Added message Marking, Read/Unread toggle.

## 0.2alpha - 1997/02/12:

- Debugged the program, fixed lots'a bugs, added QWK support. Only a
  preview! Don't use it, that's my advice! ;)

-- John Zero

## 0.1c.staticbin - 1996/??/??:

- statically linked elf executable of 0.1c. Problems were reported with gcc
  2.7.2 and libc 5.2.?.

## 0.1c - 1996/03/19:

- bugfix, now uses "todos", instead of "/usr/bin/todos", only elf binary
  included

## 0.1b - 1996/02/05:

- Compiles on RedHat 2.1 + dynamic elf binary included

## 0.1a - 1996/02/03:

- INSTALL file created (cut from readme)

## 0.1 - 1996/01/27:

- initial release

-- Kolossvary Tamas and Toth Istvan