File: KNOWNBUGS

package info (click to toggle)
epic5 3.0.3-1
  • links: PTS
  • area: main
  • in suites: forky, sid
  • size: 5,328 kB
  • sloc: ansic: 75,810; makefile: 648; ruby: 227; python: 215; sh: 78; perl: 13
file content (1426 lines) | stat: -rw-r--r-- 85,017 bytes parent folder | download
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
EPIC5 Projects, Bugs, and other Errata:

THINGS TO WORK ON
------------------------------------------------
Actual bugs
============
<none>

Creature Comforts
====================
* /window maximize + new status expando when a zero-height window gets output
* Be able to retrieve/cycle through "next notified (activity) window"

Data improvements
===================
* Rethink "targets" with channels and queries 
* Change /ignore to support broader patterns (servers, nicks, etc)
* Support "virtual timestamps" -- don't fetch the real time
* Support ZNC's CAP that prefixes timestamp (see above)

Weaknesses
===========
* The way we handle "screen is not tall enough" underflow needs work
* Typing 😂😂(multi-column emojis) upsets screen.
* I don't think /msg @L1 is implemented correctly
	files.c:file_write() for type == 2

Foundational improvements
===========================
* Mouse support (for fusion)
* Unlimited size input line with auto-chonking
* Outbound flood control for irc servers
* Properly support 005 PREFIX=(qaohv)~&@%+
* Properly support CAP
	https://datatracker.ietf.org/doc/html/draft-mitchell-irc-capabilities-01
* Rewrite the RFC1459 message tokenizer ("BreakArgs")
    - Make CAP tokens (@stupid=value) first class citizens somehow
* Support for column counting ZWJ compound emojis
  + Sending a "Man shrugging medium-light skin tone"
    https://emojipedia.org/man-shrugging-medium-light-skin-tone
    is a "ZWJ sequence" which epic may not support correctly
   [ 5:34PM] -> (#epic) https://imgur.com/a/46IUXP0   -- how it originally appeared as received  (expected behavior per github)
   [ 5:34PM] -> (#epic) https://imgur.com/a/P8gEFnG   -- how it appeared after you swapped the window out and in again
   [ 5:35PM] -> (#epic) https://imgur.com/a/lSlLqQE   -- how it appeared in the log (text) file
  + Not every terminal emulator handles them, and then there's screen and tmux, too
  + Supposedly, you can output emojis and ask for column position to assess what's supported.

[I moved the old list to the file "WISHLIST" to keep this file short]

[See http://www.epicsol.org/PROJECTS for things to come in the future]
[See http://www.epicsol.org/CHANGELOG5 for things that changed in the past]

THE CHANGELOG SINCE THE LAST RELEASE:
-------------------------------------
* Patch from twincest to fix build on solaris
* Don't honor queries for WALLOPS (requested by opers)
* Conditionalize <ieeefp.h> per twincest's fix.
* Clear RUBYDOTOH if ruby is found but it isn't usable (rb Zoopee)
* Rewrite checks for (intmax_t) for systems w/o strtoimax(). (rb JailBird)
* Define NSIG as _NSIG or 32 if it's not defined (rb JailBird)
* Broaden what you can specify for the server "proto" field (see UPDATES)
* Fix figure_out_address() to properly identify a server name
* This fixes /ignore user@host.com which was lamely broken.
* Make /window channel output all channels in the window
* Don't call update_all_status() if /set -status_clock (by Oliver Fromme)
* Comment out strtol() compat stuff, causing people problems.
* More graciously handle snprintf() returning -1 (rb twincest)
* Do not use /usr/include/ep on hpux
* Mark lastlog items as "dead" and check for them to avoid dangling ptrs
* Handle (graciously) when /set scroll_lines is > size of the window. (rb CE)
* Properly handle remove_lastlog_item() for the very last item.
* Fixes /eval defer window new kill;defer window new;defer window kill_others
* Add $hookctl(ARGS <recursive> <args>) allows you to replace $* in /on.
* Add $hookctl(USERINFO <recursive> <info>) allows you to set dynamic info.
* Don't lamely malloc_strcpy() over non-malloced strings in hookctl.
* Add $iconvctl() to control iconv stuff. (See UPDATES.)
* Add $xform(iconv +<iconv id>) functionality. (See UPDATES.)
* Fix bug where /window number could lead to confused lastlogs
* Generalize base64 encoding so it doesn't hardcode the base64 string.
* Add $xform(+FISH64 ...) which does FiSH's base64 encoding.
* Make a better test for embedded perl support by calling SvTRUE().
* Fix /bind -defaults so it actually removes all keybindings first. doh.
* Fix /window double so it actually shows you the current double status.
* Make the expression error for too many operands output the expression.
* Rewrite the iconv() configure checks to deal with libiconv's #define's.
* Rewrite the strtoimax() tests so they don't fail lamely to detect (intmax_t)
* Rewrite the perl and ruby runtime configure tests so they work right with gcc
* Fix various warnings revealed by gcc warnings
* Make a very preliminary attempt to write some fish decoding stuff. Not Ready!
* Fix for configure to handle perl's non-existance (kreca)
* Fix wserv4 dependencies so you can do make -j4 on multi-cpu.
* Rework the ruby checking in configure so it builds on freebsd-7
* Add CTCP FISH support (this is _not_ fish support!), see UPDATES
* Make an initial stab at proper support for FiSH's base64 converter.
* I took the "fish64" entry out of $xform() for now while it's broken.
* Capture stdout of ruby scripts and send it to an epic window. yay!
* This means you can do regular old 'puts' in ruby script and it'll Just Work.
* Finish $xform() for +fish64 and -fish64, verified against actual FiSH code
* Try to make the perl configure check more robust for non-working perls.
* Start a project to convert things to use transform_string().
* Fix show_lastlog() to return the rewritten result (so -mangle works)
* Actually sunset [en|de]code().
* Create transform_string_dyn, a pleasant api in front of transform_string.
* Create a bunch of global vars for transform_string to avoid lookups.
* Add hints to how big destination buffers should be for xforming.
* Fix transforms by initializing the expander and overhead items.
* Make various sanity checks for transforms to fix amn.
* Ensure all the users of transform_string_dyn are prepared to handle NULLs
* Ensure all the xform encoder/decoders can handle zero dest buffer sizes
* Add code to configure to fail if OpenSSL is not found.  No turning back!
* Split the notion of "iv size" and "blocksize" in crypto support
* This is needed because FiSH does not use an IV, being an ECB cipher
* It's also needed because the notion that the IV *must* be blocksize is lame.
* Add notion of "trimmable bytes" to end of crypto message
* Again, this is for FiSH, because it doesn't trim bytes on last packet.
* Support for assissting valgrind in helping us find memory leaks (caf)
* Fix memory leaks found by valgrind (caf)
* GC function_[en|de]code() and function_sha256 (superceded by $xform())
* GC unused [en|de]code(), enquote_it, dequote_it, and dequote_buffer().
* Fix display calcs when adding 1st window to 1st screen
* This allows you to change 'status.number' for default # of status lines
* Start tracking timestamps for scrollback items
* Full generalization of scrollback/scrollforward functions
* Implement scrollback/forward based on lines
* Implement scrollback/forward based on regex
* Begin thinking about implementing scrollback/forward based on time (not done)
* Windows that are hidden from birth have a fake height of 24 lines
* This fixes a bug where doing /window double on hold_slider 0 in a 
  never-visible window caused it to get stuck in an infinite loop.
* Add new scripts, "help.irc", "history.rb", "locale", and "tabkey.sjh"
* I need to document these in UPDATE!
* Add /exec -closeout, to send EOF to the exec'd process
* Add $dccctl(FD_TO_REFNUM <fd>) to convert $connect() to a refnum for dccctl.
* Remember $dccctl(GET refnum WRITABLE) detects a connected socket, by rule
* Change /on 322 handler so output always goes to OTHER, not to the window.
* Add an /on switch_query, but it's incomplete, so don't use it yet.
* Rewrite malloc_sprintf() so it can be used by do_hook_internal().
* Revamp do_hook() so it returns the final value of $*
* This will allow future use of do_hook() to rewrite text.
* Don't test for /usr/local/lib/libiconv.a because os x doesn't have it
* Prototype malloc_vsnprintf().
* Don't test uninitialized variables, you dummy.
* Have to be more aggressive using va_copy() for 64-bit sake
* Add /xeval -n {...} which un-does the ^ operation.
* Fix the 'ambig' script to use /xeval -n.
* Fix the command mode support in 'builtins' to use /xeval -n
* Reorganize open_log(), add support for double quotes around filenames
* Verify that logfiles are now working as I Hope they would.
* Make 'global' load ambig and newnick, since those recently came up
* Change a variable name to avoid conflicts with a global symbol
* Create a stub function to calculate how long the input line could be.
* Fix a bug with /who -real (i forgot who reported this, sorry!)
* Fix the redonkulous spurious errors when using $convert().
* Add a configure check for strtoimax() being a macro (ugh)
* Apparently strings in configure are supposed to be [quote]d.
* Check for strtoimax() separately in inttypes.h and stdint.h
* This hopefully fixes the build on hpux
* Add @E<win> as a /msg target so you can /msg a window.
* Fix lame compile error in wserv() if we need yell().
* Improve the test for libarchive in configure
* Fix /bind -default because it whacked the bindings themselves. doh!
* Normalize the copyright notice on scripts BlackJac wrote, per his request
* Fix 439 handling for inspircd (rb twincest)
* Add the ability to /log server all or /log add all for server logs.
* Change the configure test for perl from AC_TRY_LINK to AC_TRY_RUN
* Change string insensitive comparisons so "SERVER" doesn't match "SASAFRASS"
* Bump up the "overhead" bytes for xform()s to multiples of 8 per zlonix
* Support /log server ALL and /log type server add ALL to log all servers
* Fix brain-o that I missed -- strnicmp() consumers must use FULL STRINGS!
* Fix more.  You'd think I was not paying attention or something.
* Don't permit /xecho /flag because that's just useless
* Fix two dcc locking bogons that i discovered by accident.
* Revert the string insensitive comparison changes for now.
* Use PRIdMAX and PRIuMAX for printing (intmax_t), for hpux, or larne
* Fix my brokenness of my_stricmp().  Time to go hide under a rock.
* Fix the bug where the right indicator appeared when it should not.
* Add the 'logman' script which does per-server, and per-channel logging
* Handle inspired's BBC 351 numeric, for larne.
* Fix bug with /encrypt complaining "X is not a multiple of Y!" (rb zlonix)
* Add a bunch more scripts I've been sitting on that were contributed.
* Add 'cycle', 'set_color', 'ban', and 'speak.irc' scripts. i need to doc them
* Create some internal funcs to allow updating a server desc on the fly
* Allow add_servers() to update server descriptions
* Allow /server -add to update server descriptions
* Allow /server -update to update server descriptions
* Allow plain old /server to update server descriptions
* Allow $serverctl(READ_FILE filename) to update server descriptions
* Add $serverctl(UPDATE refnum stuff) to update server descriptions
* Allow /window server to update server descriptions
* Add $windowctl(GET x SERVER_STRING) returns last good /window server value
* Release epic5-1.1.1 (commit 1631) (Prolixity)
* Fixes so /server <group> doesn't clobber <host> with <group> (rb howl)
* Add support for /server refnum:<other flags> which I noticed
* For example, this means, /server 0:type=irc-ssl now works! yay!
* Add special check for OS X (Zach)
* Fix configure check for perl so it doesn't segfault.
* Fix configure check for iconv, so it doesn't bork the freebsd port
* Iconv support really is mandatory now! I mean it!
* Fix transform_string_dyn().  How did nobody catch this??
* Add a function findchar_quoted() like strchr(), but honors \.s
* Use this in server descriptions to find the unquoted : after a PASS.
* This means you can \ a : in a password. yay!
* Nuke the "URLPASS" support.  Let us never speak of this again.
* Two changes to timer.c from caf.
* Fix bugs found by --with-warns.
* Add a check in configure for -fno-strict-aliasing; could be used with -O2?
* Fix /parsekey reset_line so it sets the cursor to the end (for howl)
* Add /on unknown_set for howl (see UPDATES)
* Fix set_input(), which fixes history. yay!
* When /dcc causes nonblocking connect, tell the user so they know we tried
* Add 'c' option to $sar() and $msar() (see UPDATES)
* Revamp substitute_string() so $sar() and $msar() work as intended.
* Add a NONE_xform const to do null transformations.
* Release epic5-1.1.2 (commit 1638) (Trencherman)
* Fix build so it builds on mac os x, with or without macports perl.
* Fix brain-dead typo with /on unknown_set support
* Rewrite /bind transpose_characters in response to it being borked.
* Fix configure support so valgrind can be used (caf)
* Fix crash when you output to a window while it's being killed (caf)
* Fix memory leak with initialization of hook stuff (caf)
* Fix memory leak with realnames when a server is destroyed (caf)
* Change /bind previous_word and next_word to honor /set word_break
* Apparently the lastlog output stuff wasn't guarded properly by show_lastlog
* Refine fix for crash when you output to a window while it's being killed
* Use the length passed to write_server_ssl(), that's what it's there for (ce)
* Avoid null derefs with OMATCH/IMATCH/PMATCH in serverctl (ce)
* Fix /allocdump so it doesn't crash without a filename (ce)
* Fix for a bug that stopped "/xquote -u" inserting null chars.
* Fixed $serverctl([gio]match ...) to not return deleted servers.
* Improve performance in the main select loop.  In practice, MAY require minor script alterations.
* Save the errno from a failed $dbmctl(OPEN) for $dbmctl(ERROR -1)
* Add $channelsyncing(#chan server) for tjh.
* Make $info(o) show "S" if OpenSSL was compiled in -- useful for crypto
* When starting /dcc nonblocking connect, don't worry the user with noise
* Display the original /window arglist on any syntax error.
* Remove ADD_STR_TO_LIST macro (caf)
* Add "from" window to adjust_context_windows, windows are killed (caf)
* Fix from_server getting lost in vsyserr (caf)
* Fix null deref in umode handler (caf)
* Add %G status expando, to return 005 NETWORK (caf)
* Friendlier ZNC support changes follow here...
* Allow multiple servers on same (host,port) with different passwords
* For now, neutralize adjust_window_refnums() until a proper fix (rb tjh)
* Caf noticed I fixed the wrong bug. oops!
* EPIC5-1.1.3 released here (Feculance) (Commit ID: 1656)
* Add $xform("+LEN" ...) which turns anything into a length (for ciphertext)
* Fix $xform("-FiSH" ...) for compatability with other implementations.
* Don't accept EAGAIN as a valid error code for connect (caf)
* Fix infinite loop bug with /userhost (caf)
* Fix memory leak with /who in certain error conditions (caf)
* Rewrite isonbase() so it handles longer nicks correctly (caf)
* Implement /lastlog -ignore, which shows everything EXCEPT the pattern.
* Add /xeval -nolog which suppresses logging for that command.
* Implement $dccctl([SG]ET refnum PACKET_SIZE num) for packet-buffering
* Implement $dccctl([SG]ET refnum FULL_LINE_BUFFER [01]) for forced line buff
* Implement $hookctl(CURRENT_IMPLIED_HOOK) for implied on hooks to know context
* Add "expire timeout" to lastlog entries
* Create do_expire_lastlog_entries() which wipes expired window output
* Add functions to "merge" logfiles/channels/output/timers to a new window
* Remove the scripted COMMAND_MODE feature, which interferes with /window merge
* Add /xecho -E which causes window output to get away after some seconds
* Add /window merge which collapses two windows into one and kills the other
* window->lastlog_size must be maintained for both giver and taker!
* Try to fix some infinite loops when cleaning up window lastlogs.
* Add fn name to many panics.
* Make /on set only throw once if the user types the canonical /set name.
* Automatically close all $dbmctl() open files on exit.
* Fix /lastlog -context (but only for the normal case. -reverse comes next)
* Update_server_from_raw_desc() was missing a clear_serverinfo().
* Improve error handling for /hostname errors.
* Add /xdebug no_color which turns off color support at the lowest level.
* Fix /lastlog -reverse -context, all done now!
* Don't allow $repeat() or $pad() to request strings > 1MB.
* Have the malloc-failed panic tell you how many bytes were requested.
* Add a feature to check for unreleased message_from contexts in main().
* Fix two missing message_from leaks in server handler.
* Fix the lastlog trimming, an infinite loop (caf)
* Increase detail when debugging output contexts (caf)
* Reformat some code, fix more display context leaks (caf)
* EPIC5-1.1.4 released here (Adumbration) (Commit ID: 1667)
* Fix lock-ups when killing windows by refining the safeguard
* Create slurp_elf_file/string_feof|fgets|fgetc, to front-end ELF files
* Change /load to use the string front-end functions
* This allows /load to work on pure strings, and decouples from files
* Create recode_with_iconv() to convert a string using iconv() (for /load)
* Add /load -encoding which lets you specify the encoding of the file
* This means you can load iso-8859-1 encoded files on a utf8 terminal!
* Fix various warnings from gcc -Wall
* Add a new /set DEFAULT_SCRIPT_ENCODING -- will be used soon!
* Call setlocale(LC_ALL, "") at start of main() to get locale info
* Fix slurp_file() (caf)
* Fix make installman, man page filename had changed
* Begin a major project to fix issues suggested by clang (Ancient)
* Fix xecho as suggested by clang
* Check retval of set[ug]id() just because it's good style
* Make sure "MAXPATHLEN" (bsd) is always spelled "PATH_MAX" (posix)
* Fix while as suggested by clang
* Re-comment translate_user_input() based on suggestion by ce
* Move add_wait_prompt() to a new home
* Fix whoreply() as suggested by clang
* All of the below were suggested by clang.
* Fix set_screens_current_window() and search_for().
* Fix a "use-after-free" when realloc() fails
* Fix or paper over string-overruns for a malformed globs
* Fix a memory leak when opening a compressed file fails
* Fix a corruption of from_server in vsyserr()
* Check the param to denormalize_string() 
* Slurp_file shouldn't call stat() or check its retval
* Denormalize_string() should check its param
* And so should p_killmsg(), and dishonor kill msg if its malformed.
* Fix /while, /topic, and $repeat() in case of malformed arguments
* All of the above were suggested by clang
* More fixes suggested by clang that I'm too annoyed to list out.
* Even more fixes suggested by clang (most related to theoretical null derefs)
* Even more fixes...
* Rewrite /window move and /window move_to to make clang happy
* One final batch of updates by clang....
* Rewrite lastlog moving funcs to use windows ptrs instead of refnums (caf)
* EPIC5-1.1.5 released here (Gallimaufry) (Commit ID: 1683)
* Add /QUEUE -RUNONE
* Caf and jm confirmed that ircu doesn't use 307 for USERIP any more.
* ignorectl(DELETE) is not silent and it should be.
* To satisfy fedora packaging rules, accept DESTDIR for 'make install'
* Many printf() format fixes (caf)
* Many changes clang suggested
* Fix "topicbar" script to double quote "s for now.
* Fixed-skipped windows don't get channels from /window kill (unless no choice)
* Add $windowctl(REFNUMS_BY_PRIORITY) to give you windows by current-ness
* Add /lastlog -reignore (ce)
* Add $logctl(NEW)
* Add $logctl(LAST_CREATED)
* EPIC5-1.1.6 released here (Kakorrhaphiophobia) (Commit ID: 1693)
* Begin a big project to decouple status bar generation from window refresh.
* Create $status_oneoff() which lets you press a status bar on the fly.
* Fix configure and the build so it works with ruby 1.8/1.9/2.0
* Update the help script to work with the new website (credit <fill in here>)
* Make many changes based on suggestions by clang and scan-build
* Make the configure checks for ruby support more ruby executable names
* A few minor changes to the history.rb script for no reason
* Add /input -- to end arg processing so your prompt can start with hyphen
* Fix a typo bug that kept the correct status bar from being regen.
* Fix another issue with /window server that caused status not to be updated
* Add a VERY TEMPORARY /debuglog command for my use.  Will go away soon!
* Fix status bar update problems (sigh)
* Update status bar from set_server_005s, so %G updates right away. (caf)
* Larnifications for incoming nicknames (caf)
* Add %{4}S status bar expando, always returns full "itsname"
* When checking Maildir for /set mail 1, ignore subdirectories (rb zlonix)
* Change string_fgets() to return the number of bytes read
* Always check servers at startup, even if user did -S. 
*   (They might have done /server in their startup)
* Change file_size() to use normalize_filename().
* This allows MAILDIR to support ~-expansion (ie, ~/Maildir)
* The sender can be omitted (such as with "NOTICE AUTH"), so don't check those
* New xmsglog script from zlonix
* Fix trimming support for $xform().  Plus, FISH should do trimming. (rb zlonix)
* Fix maildir support for /set mail 1 (help by zlonix)
* Update tabkey.ce from fudd
* Update xmsglog from zlonix
* Two new scripts, sasl_auth and idlealert from zlonix.
* EPIC5-1.1.7 released here (Kainotophobia) (Commit ID: 1705)
* Updated massmode from zlonix.
* All the stuff below are round 1 utf8 support for input line
* New file, wcwidth.c, utf8<->unicode conversion, unicode column counting.
* Revamp /INPUT system to be utf8 aware.  callback 2nd arg is now const.
* Specifically, save the state of the input line across /INPUTs.
* -- This is stub code. needs to be completely fleshed out.
* Reformat keys.c so I can work with it easier
* Only bytes < 127 can now participate in binds.  >= 128 are SELF_INSERT.
* I think the keybinding system can grow 'namespaces' which might be cool.
* The TRANSPOSE_CHARACTERS keybinding has passed away quietly.
* New keybinding DEBUG_INPUT_LINE to help me
* Revamp the edit_codepoint() system to work with unicode code points
* Screen input now collects bytes until it gets valid utf8 code points.
* Collect all of the input line data structures into Struct InputLine
* Give each screen it's own inputline with an eye towards stacking them.
* The ability to 'fake' input in dumb mode has passed away quietly.
* Completely revamp input.c to work with inputline data structure
* Change input line so users operate on "logical characters"
* Inputline data structure maps "logical characters" to bytes in input buffer.
* It's almost too overwhelming to describe specific details.
* Basically the input system accepts unicode code points, and stores in utf8.
* Things like cursor movement, column counting, side scrolling all Just Work.
* Even things like cut buffering work.
* HOWEVER -- it seems this stuff doesn't work in GNU screen. can't fix this. :/
* Internal function strext2() allows me to cut substrings out, for input buf.
* Fix input_delete_character(), it forgot to call retokenize_input()
* Fix term_inputline_putchar() so it doesn't mangle 0x9b (valid utf8 char)
* Fix $curpos(), sort of.  Does this return byte offset or column offset?
* 	It used to be the same, but now it's not!
* InputLine.buffer_pos isn't used any more.  Whack that.
* Test every keybinding, fix the ones that are broken.
* Fix handling of highlight chars
* Add "number_of_logical_chars" to input line so we can boundary check eol.
* Error if you try to /bind a high bit char -- that's illegal now.
* Test and fix composed characters (for mac os x)
* Teach the normalize_string, prepare_display, and output_with_count about utf8
* Since utf8 parsing is "consumptive", some utility funcs changed too
* Column counting/line wrapping in the display works correctly now.
* Fix read_color_seq().
* ... again.
* Fix screen prompts so they can recurse, and restore previous state!
* Fix line wrapping bug that zlonix found.
* Get column counting working for the status bar (rb zlonix)
* Re-implement /input -noecho
* Create a utf8 string checker
* Add "encoding=<stuff>" flag to /server descriptions to act as default.
* EG, /server host=irc.foo.com:encoding=ISO-8859-1
* Run every non-utf8 string from the server through iconv using def encoding
* Extend $chr() to accept U+xxxx strings
* Add function $unicode() converts input into U+xxxx strings
* Add recode.c, to hold stuff regarding /ENCODING and encoding xlates
* New command, /ENCODING, declare encodings for targets. only "console" now.
* Translate user input via /encoding console setting, defaults to utf8.
* Translate screen output to /encoding console setting
* Non-utf8 users now appear as utf8 users to irc!
* UTF8 users now appear as non-utf8 users to non-utf8 epic users!
* Automatically recode undeclared non-utf8 scripts using /encoding scripts
* Add Emojis (unicode 6) to the column counting code (rb Kitambi)
* Set /ENCODING CONSOLE automatically to nl_langinfo(CODESET) from LC_ALL.
* If the default codeset is "US-ASCII" then it's changed to ISO-885-1.
* In translate_user_input() try to detect utf8 typers using non-utf8 encodings
* Tell user if we're recoding a script at /load time.
* Fix slurp_elf_file() it was leaving a 0xFF at end of file, confusing /load
* Don't bind ^T to non-existing TRANSPOSE_CHARACTERS keybinding.
* Bump MAXPARA from 15 to 20 for RusNet
* Fix the UTF8 detector for user input
* Fix cursor left when switching zones to the left.
* Allow /set word_break to include high bit code points (rb fusion)
* To work around RusNET, forgive truncated utf8 sequences at the end.
* Fix /server , so it doesn't null deref.
* Add /lastlog -this_server and /lastlog -global for zlonix.
* Fix $windowctl(NEW) by forbidding status updates during window creation.
* Default /ENCODING CONSOLE to the user's locale, not to utf8.
* Re-implement /set allow_c1_chars for input line, display prep, and output.
* Fix diagnostic output of /encoding
* Comment out some stuff in term.c that isn't being used.
* Re-implement status repeat-char-fill for utf8. (rb fudd)
* Fix /xtype -l to be UTF-8 aware. (rb zlonix)
* When status updates are suppressed, make a note if an attempt is tried
* When status updates are permitted again, do an update_all_status() if defered
* Make /set lastlog do a scrollback redraw to "dispose" of extra lines
* Make /set lastlog refuse to set to a value < twice the biggest window.
* However, doing /set lastlog 0 WILL delete everything and clear every window.
* Have configure auto-detect your "local" directory (/usr/local|opt|/usr/pkg)
* Have configure use the auto-detected local directory.
* Reformat some parts of server.c
* Change the current window whenever we're processing server stuff.
  -- This was withdrawn because it was very unpopular.
* Don't allow /window lastlog to set the lastlog too low. 
* Add support for ITALICS (^P) (\020), including ITALIC keybinding.
* Add support for 256 colors.  I should document all changes but i don't wanna
* Document all the places where encoding translation should happen.
* De-harshen some comments I wrote 20 years ago in anger.
* Fix colors with high bit set. (rb Hellfire)
* Change ^X so it only supports two hex digits 00-FF
* Fix QUOTE_CHARACTER (^Q)
* Lots of internal work to implement back-end of /encoding.
* Add decide_encoding() to evaluate rules and pick one for non-utf8 stuff.
* Add serverinfo_matches_servref() internal to decide if (si) works for a serv.
* Add outbound_recode() internal to translate messages we're sending out
* Add inbound_recode() internal to translate messages received from irc.
* Add recode_with_iconv_t() internal function for the above.
* Rewrite (inbound_recode()) privmsgs, notices, topics, all this good stuff
* Rewrite (outbound_recode()) msgs, notices.
* Withdraw the /server -encoding feature.
* Add /xdebug recode to debug recoding rules.  Help you help me!
* Review the recode code and leave comments for future improvement
* Don't allow the user to delete the magic recode rules.
* Fix $tobase(<base> 0) to always return 0 instead of empty string.
* Fix $"", caused by accumulator in translate_user_input not being cleaned.
* Fix bug with /encoding found by zlonix.
* Make serverinfo_matches_servref() honor 005 NETWORK value.
* Add /encoding support for 311, 314, 322, 332, and 352 numerics (*gulp*)
* Leave notes to add support for outbound topic/kick/part/etc.
* Add /encoding support for CTCPs (reported by zlonix)
* Fix /encoding support for PARTs (found by zlonix)
* Add /encoding support for outbound KICKs/TOPICs/etc
* Create internal rfc1459_any_to_utf8 to preprocess before parse_server().
* Tokenize recode rule "target" at create time instead of every evaluation
* This is part of a larger code cleanup for recode.c
* Remove the per-message handling for /encoding since it's done globally now.
* Change vsend_to_aserver so it does recoding.
* This means outbound doesn't honor /set translation any more
* This requires send_to_server_with_payload() since payloads already recoded
* Fix typo causing payload not to be recoded properly.
* Missing a break. d'oh.
* Outbound messages should not be recoded if they're already utf8.
* Yes they must be! duh.  Square all this away with zlonix.
* Fix send_text so it doesn't send non-utf8 text through /on send_msg
* Finnese invalid_utf8str() so it doesn't truncate partial cp's for non-utf8s
* Warn if we try to do double-outbound-recoding
* Be more sensible about handling string lengths in vsend_to_server()s.
* Add $^*var to 'quote everything' (except letters and digits)
* When recoding inbound, move server|payload part out of buffer first.
* Don't double decode the ircname in whoreply.
* Rewrite strformat() to be utf8 aware.  This fixes $[9]var
* Rewrite $pad() to be utf8 aware.
* Allow char-based /set's to hold a utf8 code point (for /set pad_char)
* Fix typo in check_xdigit() that borked 256 colors
* Fix $status_oneoff() to repeat with space if status bar is empty string.
* Don't -1 the line len when passing to prepare_display(); already adjusted!
* De-confuse ctcp_type and sed_type in the /encrypt stuff
* Make encryption work again, with encoding (but not with recursive ctcps)
* Write special handling for (defering) recoding of CTCPs until decrypted
* Rewrite $left(), $right(), and $mid() to be utf8 aware.
* Make /FEC utf8 aware.
* Fix a double recode with outbound ctcps
* Extend send_text() with a new flag saying if text already recoded
* Don't double-recode ctcp's!
* Inbound recoding of CTCPs must happen *before* processing, not afterwards
* This fixes /encode + /encrypt + /me
* Convert $strlen() to utf8-aware, many others to follow
* Add new flag "CTCP_NORECODE" which tells do_ctcp not to recode first.
* This allows non-encryption ctcps to automatically be recoded.
* This fixes /me yet again.
* Create internal cpindex() and rcpindex(), like [r]sindex(), but works on CPs
* Adjust internal chop() to work on code points. 
* Make a first pass to choke if /encoding argument is not valid locale.
* Write some more internal CP based functions in wcwidth.c
* Rewrite/ensure these functions are UTF8 aware:
	strlen	chop	index	rindex	indextoword	wordtoindex	maxlen
* Write a half-finished reimplementation of $fix_width() that is commented out
* Fix rcpindex() when the search char isn't in the string
* Fix search_for() which makes $before() and $after() utf8 aware.
* Eliminate usage of internal sindex() -> strchr(), strpbrk(), or cpindex().
* Rewrite/ensure these functions are UTF8 aware:
	strip	split	before	after	curpos
* At startup, create a (locale_t) that points to "en_US.UTF-8" for ctype funcs
* Create internal mkupper_l and mklower_l to convert codepoints to upper/lower
* Rewrite internal upper()/lower() to use mk(upper|lower)_l.
* This makes $toupper() and $tolower() utf8 aware. yay!  And other stuff!
* Implement internal utf8_strnicmp and use it for my_str[n]icmp.
* This means things like case insensitive aliases work for non-english! yay!
* Rewrite/ensure these functions are UTF8 aware:
	toupper	tolower
* Add sanity check to next_code_point() to warn if i do something stupid.
* Revise next_in_div_list to take CP so $[m]sar() can take arbitrary delims
* Revise substitute_string to handle case insensitivity as utf8 aware.
* Rewrite/ensure these functions are UTF8 aware:
	reverse	rest	pass	sar	msar
* De-emphasize toupper() and tolower(), which are not utf8 aware
* Comment out $shiftseg() until I learn more about it (needs utf8)
* Rewrite/ensure these functions are UTF8 aware:
	center	tr	chrq	insert
* Rewrite/ensure these functions are UTF8 aware:
	substr	rsubstr
* Fix many warnings suggested by the compiler
* Zlonix updated idlealert, sasl_auth, xmsglog, and added new_lastlog.
* I had added contrib/utf8.c and regress/test_xform3 regress/test_xform4.
* Fix many warnings/bugs suggested by clang's static analyzer
* Add sanity checking for encodings, so we can warn the user
* Specifically check the locale encoding for sanity, use ISO-8859-1 as fallback
* Warn the user if /encoding encoding is unusable -- and don't switch over.
* Put in references to two wiki pages I need to document
	http://epicsol.org/encodings_and_locales
	http://epicsol.org/encoding
* Server names can contain '*'s. (rb zlonix)
* Fix /topic when you don't supply a channel (rb zlonix)
* EPIC5-1.1.8 released here (Atavistic) (Commit ID: 1775)
* Fix from freebsd to avoid checking yes(1) as ruby executable in configure
* Create functions to enumerate what should be documented in wiki
* This is exposed via undocumented $help_topics() function.
* Explicitly set LC_NUMERIC to "C" because otherwise math parser breaks
* Reset /window activity when a window becomes current (as in /window notified)
* Create stub for $encodingctl(), and spec it, but not implemented yet.
* Create internal time_since_startup() function (for eventual load logging)
* recode.c needs to include <xlocale.h> because of newlocale(3).
* Add new "source" flag to recode rules, to tell user where rule came from.
* Implement $encodingctl().
* RecodeRule->magic wasn't being set correctly.
* Output the recode rule refnum for /encoding
* Rewrite internal fix_string_with(), with new chop_[final_]columns() funcs.
* Extend $fix_width() to support 'c'enter and 'r'ight justify, and UTF8 aware.
* EPIC5-1.1.9 released here (Desquamation) (Commit: 1780)
* Fix compile error in function_help_topics
* EPIC5-1.1.10 released here (Desquamation) (Commit: 1781)
* Updated sasl_auth (v1.2) from zlonix 
* Fix input lines being blank on non-main screens (set output_screen)
* Fix not being able to chain /INPUT's together (reset input line before callb)
* DO NOT set the window when handling server (very unpopular)
  (* Change the current window whenever we're processing server stuff.)
* Rewrite add_window_to_screen/remove_window_from_rewrite
* Rewrite recalculate_windows.
* This fixes screen corruption when creating wins or shrinking your screen.
* Fix a bug where UPDATE_STATUS could get ignored (introduce FORCE_STATUS)
* Remove /set translation and all its stuff.
* Don't unforce the status bar until it's actually been redrawn.
* Set a window's screen before hiding it on /window new_hide (rb fusion)
* Fix rogue semicolon.
* Fix a null deref in creating new window when all other windows are fixed
* Fix some bugs that clang static analyzer found
* Fix where /set -continued_line led to strange denormalize behavior (rb Tilt)
* Add tmux support for /window create, (zlonix)
* Fix all calls to iconv() so they follow standard (2d arg -> (char **))
* Revamp do_crypto() to recode messages after decryption.  Somehow missed this
* Add comments to various functions that I think deserve it.
* Windows added to screens must have their "my_cols" set!
* Add support for detecting iso2022-jp for fusion (Japenese non-utf8 encoding)
* Plaster over two lame clang warnings in if.c so i don't have to look at them.
* Don't #include "wcwidth.c" from ircaux.c, compile on its own
* Make next_code_point() self-synchronizing; callers doesn't have to handle err
* Update for topicbar from zlonix (rename topicbar.purge -> datapurge)
* Modify next_code_point() to allow re-syncing or error reporting.
* This fixes a bug where invalid_utf8string was broken (rb zlonix)
* Adjust the wrapping point for long lines without breaks (rb fudd)
* Remove /set default_script_encoding (superceded by /encoding scripts)
* Remove /set high_bit_escape (superceded by /encoding console)
* When i rewrote recalculate_windows() forgot to call window_check_columns()!
* $read() will using /encoding scripts to convert non-utf8 strings. (temp!)
* Fix next_code_point() to skip bytes, not increment them (fusion)
* Don't permit /set no_control_log to overrule mangling
* Improve the warning for /set dcc_use_gateway_addr for ipv6 only conns
* Don't use/require /hostname to be set for /server connections, (rb stygian)
* Fix connecting to server w/o vhost (caused by previous commit)
* Fix a crash with ^L when there is a dead screen (rb zlonix)
* Fix a crash with /window create (rb zlonix)
* Do not allow add_to_log() to be recursive, an invalid rewriter can cause
  [error] output, leading to infinite recursion (rb tjh)
* BTW, to do timestamping in logfiles, try 
  /@logctl(SET 2 REWRITE "\\($strftime(%b %d %X)) $$0 $$1-")
* Add $windowctl(REFNUMS_ON_SCREEN <winref>) to get all wins in screen order
* Fix configure check for socks5 (binki at gentoo dot org) -- Thanks!
* If after resize, scrolling view is "too high", do an /unclear (rb desaster)
* Get_subarray_elements (ie, /foreach) does NOT honor "type" arg and it should
* This fixes /foreach -cmds i {....}.  Odd that nobody noticed this...
* Allow ~'s in nicknames because ircnet permits it.   (rb Harzelien)
* New sasl_auth script from zlonix
* Add recoding support (ie, UTF8 support) to send/recv msgs from /exec procs.
* Don't whine that your irc hostname is invalid until /dcc fails because of it.
* Fix null deref when looking up a variable that exists but not as a variable
* Fix recoding /exec's by having the "target" be "%<name>", like /msg works.
* Don't let /ignore hop msgs cover up /ignore #epic joins
* Allow ` in nicknames for ircnet. (caf)
* Two scripts from zlonix, scripts/user_list scripts/tmux_away
* Fix build on systems without <xlocale.h>, newlocale() [FreeBSD-8]
* Rewrite target_file_write() to support the expected syntax
* Rewrite $write() and $writeb() to use new target_file_write() properly.
* Remove frivolous fprintf()s to stdout.
* These features were suggested by Roca He, who is doing a research project
  on inproper OpenSSL API usage by open source software.
* Output the SSL protocol upon connect (SSL_get_version())
* Call SSL_CTX_load_verify_locations() to load root CAs.  Need to /set-ify this
* Call SSL_get_verify_result() to validate certs whenever possible.
* Extend /on ssl_server_cert with $4=SSL_get_verify_result() 
* Extend /on ssl_server_cert with $5=SSL_get_version()
* Refactor ssl_connected() with comments and clarity. 
* Fetch a SSL server's certificate (including subject, issuer, pkey, and digest)
* Extend /on ssl_server_cert with $6=SSL digest (+URLified))
* Someday, we'll save the ssl_certificate and cert_hash in the server struct
* Someday, we want ssl.h to save all the metadata, for non-servers.
* Add new argument "snap" to add_timer(), for determining initial timeout.
* Updated tmux_away, userlist script (zlonix)
* Fix bug in target_file_write() not properly handling @W/@L/@ref
* Refactor the timer subsystem with comments and clarity
* Add /TIMER -SNAP which allows you to run timers "at the top of the interval"
* Make /timer option processing similar to other commands
* Add comments to make the timer API more clear and robust.
* Revamp add_time() to add snapping, and handle updating better
* Add /SET SSL_ROOT_CERT_LOCATION to pass to SSL_CTX_load_verify_locations
* Add script 'find_ssl_root_certs' which sets SSL_ROOT_CERT_LOCATION for you.
* Have 'find_ssl_root_certs' loaded by 'global'
* Fix very many warnings recommended by clang.
* Use X509_verify_cert_error_string() to get SSL verification explanation
* Revamp /load find_ssl_root_certs after discussions with folks.
* Signficantly revamp ssl.c, to make clearer, and save metadata of connection
* This is so in future, $serverctl() may provide SSL info to user/script.
* Create $serverctl(GET refnum SSL_<*>) operations for SSL info (see UPDATES)
*	CIPHER	VERIFY_RESULT	PEM	CERT_HASH	PKEY_BITS
*	SUBJECT	SUBJECT_URL	ISSUER	ISSUER_URL	VERSION
* New function $chankey() -- similar to $key(), but can specify servref.
* Support inbound recoding of dcc chat messages.
* (Outbound recoding of dcc chat messages was already supported)
* This means that dcc chat (including ctcp-over-dcc) is now utf-8 aware.
* This concludes the UTF-8 project.  EPIC5 is now fully UTF-8 aware.
* Change /set ssl_root_cert_file to /set ssl_root_cert_location
* Change default ^X binding back to SWITCH_CHANNELS
* Add a callback to /set ssl_root_cert_location to help with auto-detecting
* Don't /load find_ssl_root_certs by default, since it's auto-detected
* Updated 'layout' script from zlonix.
* This means /set -ssl_root_cert_location uses openssl default suggestions
* For crypt.c and crypto.c, "key"->"password" for passwords
* For crypt.c and crypto.c, "key"->"crypt" for crypt struct objects
* Remove #ifdef HAVE_SSL's in crypt.c, because ssl is required now.
* Change crypt's primary key to be target only, not target+crypt type
* Add /encrypt -remove to remove an entry more simply 
* Make errors for string transformations and ctcp encodings more verbose
* EPIC5-1.1.11 released here (Lucubrations) (Commit: 1810)
* Use pending-nickname if we have one as the default nickname on reconnect (caf)
* Add @serverctl(SET refnum UMODE ...) to overrule reconnect umodes
* Handle /SET -SSL_ROOT_CERTS_LOCATION in set_root_certs_location (caf)
* Eliminate some avoidable uses of strcpy/strcat/sprintf for the pedantic.
* Move the uncompleted wishlist items to the web-based wishlist
* Signficantly rewrite the shebang (-S) command line option to remove strcpy()s
* Increase the padding for SHA256 xforms to avoid a buffer overflow (caf)
* -- I switched to git here --
* "Make install" modified permissions in the tree. Ew. Take that out.
* EPIC5-1.2 released here (Deracination) (Commit: 1816)
* Always #define UNAME_HACK; don't return detailed OS info on CTCP VERSION
* OK, a compromise -- don't #define UNAME_HACK, but don't show OS version.
* Fix a crash when you do $splitw("" abcd)
* Make sure /encoding shows a builtin rule is "Set by User" if user changes it
* Internal function new_split_string() is like split_string() but utf-8 aware
* Rewrite $splitw() to use new_split_string(), so it's utf8-aware! yay!
* Fix warnings about libarchive and abs() from clang
* Fix warnings from ubuntu as a special favor to wjr.
* I can't believe it's so difficult to believe "I don't care if this fails"
* More complier warnings from gcc-4.9
* Final compiler warning, from openbsd this time.
* Lots of OS's and compilers checked.  Looks good!
* Final warning fixed!
* Refuse to recurse more than twice in send_text() to avoid infinite recursion
* Fix crash if you try to clear an /encoding rule that doesn't eixst.
* Refactor deleting a recode rule into a func and have everyone use it (rb des)
* "Valid UTF8" requires something other than a broken code point at end (rb des)
* Treat ^C99 as a bare ^C, because of other clients (rb wuf)
* Turn #define use_automargins on for now
* Add /SET FIRST_LINE which will be prefixed to all lines of output.
* Do a term_clreol() at the START of output, not the end
* This allows us to write to the last column of the display!
* Just /set -continued_line and /set first_line @ (or whatever)!
* You _MUST_ use an automargin TERM (ie, export TERM=vt102am) for this to work
* EPIC5-1.4 released here (Sententious) (Commit: 1833)
* Fix null deref when you used an implied unary operator in expression stmt.
* Fix call stack dumping, which was missing a frame, null derefing (caf)
* Add /on raw_irc_bytes for caf - raw, unfiltered data from server
* Fix dcc resume (caf)
* Be reasonable handling DCC ACCEPTs where DCC RESUME was not requested (caf)
* Fix dcc resume again (caf)
* Ensure translate_user_input() passes nul terminated string to n_c_p (caf)
* Fix memory leak with sanity_checking_encoding() (caf)
* Fix memory leak with bind_string_comporess() (caf)
* Fix $bindctl(SEQUENCE .. SET ..) when find_sequence() fails (caf)
* Below two items were reported by Felix Janda
* Musl C library (for linux) doesn't support sys_siglist, and our shim fails
* Don't require sys_siglist to be present to build epic; just remove features
* Eventually I'll build something into epic to do this at startup.
* Fix clueless function get_all_server_groups() (rb ce)
* Proper signal numbers start with 0. (0 is permitted by some systems) (fj)
* Fix preserve_serverinfo() when the hostname is an ipv6 paddr.
* Deprecate the use of strformat() which can't count columns correctly
* Add truncation to fix_width(), to allow the below...
* Fix $[len]var to use fix_width(), for well-defined behavior (see UPDATES)
* Fix $pad() to use fix_width(), for well-defined behavior (see UPDATES)
* Hide all the SSL debugging chatter behind /xdebug SSL
* Add /window log_rewrite, to overrule /set log_rewrite on window logs
* Add /window log_mangle, to overrule /set mangle_logfiles on window logs
* Remove prohibition from /query'ing an exec process that doesn't exist
* For musl libc (linux), eliminate use of sys_siglist and sig.inc.
* Roll our own signal names at runtime (ie, SIGHUP -> "HUP")
* This fixes /exec -SIGNAL %process.
* Support iconv()s that don't support //TRANSLIT (Felix Janda)
* Fix /load guh, it had an old-style C comment
* Eliminate LocalHostName in favor of LocalIPv(4|6)HostName
* If your Vhost does not resolve in the family you're using, use fallback
* Use the protocol-specific vhost when registering with the server
* The following fixes make /load ../regress/func work again
* Fix a crash with $after(1).  There are more bogons downwind here.
* Fix cpindex() and rcpindex() which fixes $index() and $rindex().
* Fix $tr() to behave the way it is documented
* Change transform_string_dyn() to return the bytes in retval, not it's size
* -- I hope this doesn't break anything else!
* EPIC5-1.6 released here (Usufruct) (Commit: 1854)
* Remove non-utf8 characters (rb Felix Janda)
* These bug fixes from caf
* Report getsockopt() errno and result in the right order (caf)
* Prevent memory leak after /DUMP (caf)
* Fix a memory leak in $bindctl(SEQUENCE .. SET ..) (caf)
* Fix memory leak caused by $open(file R) when file is executable (caf)
* Fix memory leak in /ASSIGN <name> (caf)
* Fix memory leak in $close() (caf)
* Stop looping in $delitem() after the entire array is deleted (caf)
* When deleting the only item in an array, $delitems() should return 0 (caf)
* Thanks to caf for his bug hunting and fixing! :)
* Fix false positive memory leak from using VALGRIND_MEMORY_TRIM (caf)
* Fix false positive memory leak deleting local variable stack at exit (caf)
* Fix memory leak when deleting server (caf)
* At the request of gentoo, the following patches and requests...
* Change highlight chars (^V) to #def's (REV_TOG_STR) because file(1) is weak
* Fix tcl, ruby, perl, libarchive support to be more gentoo friendly (binki)
* (We had already applied their socks patch a long time ago)
* Remove 'localhost' from IRCSERVERS default list - default is efnet now.
* The patches were for autoconf-2.60, so some changes were made
* End changes requested by gentoo
* Fix to make --with-localdir more gentoo friendly (binki)
* Fix to make parallel builds work better for gentoo (binki)
* Make /set logfile behave more like /log filename (see UPDATES)
* Make /window logfile behave more like /log filename (see UPDATES)
* Ooops.  Should have tested that better.
* EPIC5-1.8 released here (Perlustration) (Commit: 1862)
* Fix memory leak with closing ssl cnnections (caf)
* Fix memory leak with servers that never get connected (caf)
* EPIC5-2.0 released here (Gamboling) (Commit: 1864)
* Call setgid() before setuid(), for best practice (caf)
* Fix off-by-one error with printing OpenSSL strings (caf)
* Don't output the full SSL certificate for a server (caf)
* When (re-)connecting, use the hardcoded server description nick (rb larne)
* Fix utf8_strnicmp(), which broke $uniq() (robo, caf)
* Fix null deref when a server has no CA (caf)
* Remove a couple of unused variables in ssl handling (caf)
* Fix crash when you $close() an fd from $exec() [rb CE]
* Reformat all the ./configure --help outputs [rb skered]
* EPIC5-2.0.1 released here (Indolence) (Commit: 1869)
* Revamped maildir support to count both 'new' and 'cur' (wcarson)
* Optimize maildir support so it's as fast as possible (wcarson)
* Fix uninitialized pointer of window->log_rewrite (rb Q)
* Fix handling of <locale.h> for CentOS 5.11.
* new_timer() should initialise ->domref (caf)
* Remove unnecessary window->screen check in hide_window() (caf)
* Remove double-setting of *outbound in check_recoding_iconv() (caf)
* banner() should use %d for printing current_numeric (caf)
* inet_vhostsockaddr() should use %d to print port (caf)
* Simplify expression in show_key() (caf)
* Remove doubled-up SIGABRT from init_signal_names() (caf)
* In transform_string_dyn() don't use my_dest_str_len without testing for NULL (caf)
* Make output size check more robust in fish64_encode() / fish64_decode() (caf)
* Remove unused function slurp_file() (caf)
* Fix $ignorectl(WITH_TYPES ...) when only exceptive ignores are supplied (caf)
* Remove unnecessary double-setting of window_display (caf)
* Loosen overly-tight restrictions from $hookctl(SET .. SERIAL) and $hookctl(SET .. NICK) (caf)
* Fix /USLEEP for fractional second delays (caf)
* Add ( ) around constants declared as macros using shift operator (caf)
* Include output.h in compat.c for yell() (caf)
* Don't lower-case the channel name passed to whobase() (caf, rb white)
* Only populate server->uh_addr when it's needed, to avoid spurious warning
* Extend new_close() to new_close_with_option() allowing callers to manage fd
* This is used for python fd handling.
* Make new_io_event() actually support NEWIO_NULL (no io callback)
* Python support merged into 'master' here.
* Add new_open_failure_callback() which allows getting a callback on dead fd.
* Add %{1}P status bar variable, "prefix when (not) current" (see UPDATES)
* Add /set status_prefix_when(_not)_current variables, default to empty string
* Add /window status_prefix_when(_not)_current operations, default to nothing
* Convert CTCP data structures from static arrays to a bucket
* Initialize hardcoded CTCPs at boot time
* Guard against null deref when changing lastlog and/or scrollback at same time
* Overhaul ctcp.c so there are no more magic integers used as foreign keys.
* Fix a core and leak to do with /userhost and /ison queues (ce)
* Revamp/unify do_ctcp() and do_notice_ctcp() to reduce code duplication
* Change send_ctcp() to take a boolean int rather than a string for first param.
* Simplify the CTCP flags to just "ordinary" and "special", with "raw" (or not)
* CTCPs are "raw" if they need the original payload, or not if payload is string
* CTCPs are "special" if they handle everything themselves (/me, /dcc)
* Enforce anti-botnet CTCP reply flooding on the /CTCP side, not request side
* (That way, CTCPs that don't generate responses are not throttled)
* Implement $ctcpctl() to register user-defined ctcp handlers. (see UPDATES)
* Add $ctcpctl(ALL) for CLIENTINFO purposes.
* Create /load ctcp, some basic CTCPs implemented in script
* Make /load builtins do a /load ctcp 
* Comment out some basic CTCPs from the base client -- yay!
* Treat empty return strings from ctcp handlers as "not handled"
* Initialize status.prefix_when_(not_)current in new windows.
* Create a distinction between CTCPs that replace their bodies and themselves
* via $ctcpctl(SET <type> REPLACE_ARGS 0|1) [see UPDATES]
* Rewrite CTCP PING handler, create CTCP UTC handler
* Fix ipv6 p-addr vhosts for /server (rb wcarson)
* Add /exec -wintarget, output to any old window (rb wcarson) (caf)
* EPIC5-2.1.1 released here (Abulia) (Commit: 1898)
* Improve perl support (remove warnings) (caf)
* The : before final param is part of the syntax, not the message (caf, rb trn)
* Fix bug in previous patch
* Don't include <term.h> unless it's needed, because of ruby-2.7 support
* Modernize ruby support while we're at it (checked with 2.3/2.6/2.7)
* Add "passthrough read|write" support to newio, for python.
* Change python's "epic.xecho" to not default force -s by default
* Change python's @on decorator do a ^on so it's silent
* Fix a couple of compiler warnings suggested by new clang.
* Add _epic.callback_when_readable and _epic.callback_when_writable for python
* They take a python callback, and dispatch when an fd is ready.
* This allows python scripts to submit an fd for callback with newio.
* Call PyErr_Print() on an exception.  This is "noisy", but i needed it for debug.
* Eventually we have to be able to do this on our own.
* Add /pyload shortener -- an in-client url shortening redirecting proxy!
* Capture STDOUT and STDERR from python, redirect to /echo.
* Pull out the python init code into its own function
* Don't try to fancy-print exceptions, now that we're capturing stderr.
* Add count_initial_codepoints() to convert a ptr to something for $mid()
* Change $regmatches() to use count_initial_codepoints().
* Fix a dumb warning from clang about pointer arithmetic.
* Revamp /exec to behave regularly so we can treat %proc as real targetsa (see UPDATES)
* Add /on send_exec so you can reformat messages being sent to exec procs
* Add $uuid4() -- it returns UUID4s!
* Add /exec -nolaunch so you can build an /exec before starting it.
* Add $execctl() -- see UPDATES
* EPIC5-2.1.2 released here (Lugibrious) (Commit: 1908)
* Fix count_initial_codepoints() - it couldn't return 0
* This fixes $regmatches() for wcarson
* Add /window delete_kill (rb Harzilein)
* Fix /wait %proc (caf, rb wuf)
* Fix chmod() to not use ancien S_IREAD/S_IWRITE (S_IRUSR) (rb Tilt)
* Support /window -<operation> to pass in NULL to window op
* Seed all window operations with no-op handlers for NULL
* Don't discard DNS results for server until we get to ACTIVE
* Add a stub for $inputctl() -- future expansion.
* Add %{5}S status expando -- the server status (ie, "ACTIVE")
* Signficant refactoring of server.c/server.h
* - Change the term "server status" to 'server state" everywhere
* - Reorganize Server object to show what values are filled in by each state
* - Make all server.c functions static whenever possible
* - Remove all server.c functions not used anywhere
* - Remove all server.h decls not used anywhere
* - Remove unused variables in Server and other structs
* - Remove extern server_list[] and make get_server() an ordinary function
* - Remove extern server_states[] and create get_server_state_str()
* - Document many more things to make it more understandable
* - Drive the determination of "ircop" from your umode, not from a variable
* Add /on server_state to duplicate /on server_status for now
* Support $serverctl(GET x STATE) to duplicate GET STATUS
* More refactoring of server.c/server.h ssl support
* - Remove unused fields and getters/setters
* - Defer all "is this ssl?" questions to the ssl module
* - Rename "is_ssl_enabled()" to "is_fd_ssl_enabled()"
* - Rename "get_server_isssl()" to "get_server_ssl_enabled()"
* - Remove trying to track ssl enablement separately
* - Since openssl has been required for a while, remove "ssl is missing" stuff
* - Avoid setting the server state directly (ie, avoiding /on server_state)
* If something goes wrong in do_server(), just close_server()
  - If a server is connected to a window with more addrs, it'll resurrect
* Add $inputctl(GET|SET CUTBUFFER), manipulate the cut buffer.  See UPDATES
* Fix /load help.irc - point to correct url
* Remove some commented out code before release
* window_next() and window_previous() can accept nulls from SWAP_NEXT_WINDOW
* Add /window unclear -- why did this not exist?
* If a Python callback fails, call the except; if that fails, give up on fd
* /PYDIRECT without args needs a usage message
* Support /timers with /unload (rb zlonix)
* New version of epic.py and shortener.py from skully -- he asked for testing
* Improve the code in vars.c
* - Change 'flags' to 'pending' since that's all it is used for
* - Change $symbolctl() to support both FLAGS and PENDING for the symbols
* - Make get_string_var() return a const ptr so people don't change it
* - Make make_string_var_bydata() take an (IrcVariable) since that's easier
* Crank up the warning flags and start addressing things
* - Add a test in configure for __attribute__((fallthrough))
* - This allows the use of FALLTHROUGH to shut up warnings.
* - Improve a lot of const correctness issues
* - Fix other bogons it pointed out (d'oh!)
* Fix my_ctime() to honor that ctime() can return NULL.
* EPIC5-2.1.3 released here (Redound) (Commit: 1926)
* Fix configure on mac when you do --with-ssl=/path/to/somewhere (rb archon)
* Fix configure for systems where "gcc" is c99-only
* Add "verbose" flag to sanity_check_encoding()
* This is needed in init_encodings() to not output too early. (rb wcarson)
* Don't make a lack of CP437 locale a boot failure (rb wcarson)
* A lot of work was done on configure to support macports better.
* Fix where NSIG was decld in irc_std.h (caf) (rb CE)
* Add /ON CHANNEL_CLAIM and /WINDOW CLAIM (see UPDATES)
* Exempt claimable channels from referential integrity checks
* Add $uuid4(NODASHES) to get uuids without dashes
* $windowctl(GET x UUID) -- every window has a hash-free UUID now
* Allow windows to be reffed by their UUID in /window
* Revamp how channels get claimed (I like this better) to be channel-driven
* Fix get_window_by_desc() (rb Harzilein)
* Migrate configure to autoconf-2.69.
* Round two of getting configure working with 2.69
* Round three of getting configure working with 2.69
* Round four of getting configure working with 2.69
* Get configure to support Python 3.8+
* EPIC5-2.1.5 released here (Fecund) (Commit: 1945)
* Add "ssl_checkhost" field to server descriptions
* Make ssl_startup() require a hostname for ssl hostname checks
* Add ssl_get_checkhost_status() to return ssl hostname check
* Fix a place where we don't check the retval of alloca()
* Remove the "ENCODING" field from server descs which went away long ago
* Ensure "ssl-checkhost" is preserved through serverinfo changes/updates
* Perform hostname checking on ssl server connections and abort if failed
* Change "ssl-checkhost" to "ssl-strict"
* Make ssl strict checking require both the cert and hostname pass muster
* Change ssl_info.ssl_fd to "ssl" to confuse me less
* Check for self-signed certificates and pass it in /on ssl_server_cert
* Add support for getting SANs out of an SSL certificate (rb wcarson)
* Add $serverctl(GET x SSL_STRICT_STATUS)
* Add $serverctl(GET x SSL_SANS)
* Remove $serverctl(GET x SSL_STRICT_STATUS)
* Add /on SERVER_SSL_EVAL (see UPDATES)
* Add /set ACCEPT_INVALID_SSL_CERT (see UPDATES)
* Remove per-server server "strict status" in server desc
* Add "accept_cert" per server, to track whether we accept the ssl cert
* Add $serverctl(GET x SSL_CHECKHOST_RESULT)
* Add $serverctl(GET x SSL_SELF_SIGNED)
* Add $serverctl(GET|SET x SSL_ACCEPT_CERT) (see UPDATES)
* Add /SET SSL_CIPHERS (see UPDATES)
* I forgot to implement the use of /SET SSL_CIPHERS. oops
* I made signficant changes, so the above probably obsolete now
* Create an object (ssl_cert_error) 
* Start tracking *every* ssl cert verification error
* Treat ssl verification errors as tiered problems
* ie, self-signed is not as bad as bad-hostname not as bad as others
* Revamp things like "verify_result", "self_signed", etc to errors
* ie, verify_error, checkhost_error, self_signed_error
* Add a new "other_error" and "most_serious_error"
* Try to emulate the old policy behavior (pending more work)
* I need to document the flow and /on's and /set's in UPDATES
* Change $serverctl()s 
* serverctl change: SSL_VERIFY_RESULT -> SSL_VERIFY_ERROR
* serverctl change: SSL_CHECKHOST_RESULT -> SSL_CHECKHOST_ERROR
* serverctl change: SSL_SELF_SIGNED -> SSL_SELF_SIGNED_ERROR
* serverctl change: new: SSL_OTHER_ERROR
* serverctl change: new: SSL_MOST_SERIOUS_ERROR
* Reorg ssl.c because it was getting too jumbled to follow
* Ensure every function is decld static or is in header file
* Group functions by their subject area
* Only create on (SSL_CTX) for all global use now
* Don't bother pretending we support being an SSL server.
* Create a SSL verification callback that tracks/sorts every error
* This allows us to catch multiple problems (self-signed, bad hostname)
* We see multiple errors on efnet, for example
* Change find_ssl() to get_ssl_info() so its named after data type
* Roll Bad Hostname check into main SSL verification instead of extra step
* (OpenSSL discourages you from doing it as an extra step)
* I need to review /on ssl_server_cert for sanity and document it
* Remove the now superfluous notion of "strict status" checking
* Remove the bogus stubs for #ifndef HAVE_SSL since that's not supported
* Make widening the screen honor /window scrolladj
* Sync all /window operations in tabkey.ce
* Re-sort the /window operations list ("claim" was in the wrong place)
* Document $json_explode(), $json_implode() and $json_error()
* Add winref as $2 in /on channel_lost
* Remove tracking of "cursor window", a thing we haven't supported in 25 years
* Add support for (arglist) {block} statement type
* Add /window clearlevel <levels> (rb zlonix)
* The #define DEFAULT_STATUS_HOLDMODE was different from UPDATES and irregular
* Fix many things clang's static analyzer pointed out.
* Add /on reconnect_required (sb zlonix)
* /WINDOW winref SERVER servref should no-op if it's already that way.
* Add /window clearregex <regex> (rb zlonix)
* When printf()ing (time_t)s, always cast to (intmax_t) and use INTMAX_FORMAT
* When processing CTCPs with a script, don't short out /on ctcp or verbse_ctcp
* Add $serverctl(GET x PADDR) returns the p-addr of a connected server.
* Fix /server + so it correctly rolls over to server 0.
* Add $serverctl(GET x OPEN) [don't forget to document this]
* Set parsing_server_index around server errors so /timers create correctly
* Fix missing else causing all ssl cert's to be accepted
* Add support for tilde-expansion for /set ssl_root_certs_location
* If a server fd does not map to any server, close it.
* Updated version of 'reconnect' from zlonix.
* Convert our bundled test.c to be minimal c99 to avoid warnings
* Don't permit /reconnect on servers that are actively working
* /RECONNECT must not default to the current input window (bah)
* Reconnect script should use /server +refnum, not /reconnect
* Reconnect script should only do /server + on servers with groups
* EPIC5-2.1.6 (1981) (Impignorate) released here
* Add debuglog testing for /window search_back (for fusion)
* Strip all attributes when regex()ing /window search_back
* Fix warnings on mac os x 12 (rb skered)
* Add support for json object arguments ("kwargs")
* Add support for kwargs for $json_implode(): "root", "compact" (rb fusion)
* Add support for tcl8.6 -- run 'make makedepend'
* Remove dead code that was #if 0'd out for a long time.
* Make /pretend object when you're disconnected (rb skered)
* Change panic() to setjmp/longjmp back to main() instead of exit()
* Fix bugs with the new panic stuff.
* Add 'colors' and 'sasl_nistp256' scripts from zlonix
* Fix crash when you switched to AESSHA /encryption (rb zlonix)
* Add configure check for newlocale() for slackware 15 (rb fusion)
* Some CTCPs are "restartable" (encryption types). (rb zlonix)
* Add $serverctl(GET x NEXT_SERVER_IN_GROUP)
* New reconnect script (zlonix)
* Fix $realpath(); the 2d arg to normalize_filename is (Filename) (zlonix)
* Permit /lastlog -file to support ~-expansion (zlonix)
* /ON RECONNECT_REQUIRED only gets thrown when connected!
* Permit status bars on hidden windows to be generated in the ordinary way
* Add /set broken_aixterm for silly emulators that don't support bold+color
* Add ?? binary operator (coalesce), same priority as || ("DOR")
* A /window clear on a notified hidden window requires a full status regen
* Add $serverctl(DONT_CONNECT 1) to trigger the -s command line option
* Add $rgb() function to convert rgbs to 256 color (first try at this)
* Add support for ^[[38;2;r;g;bm (and 48-2) color codes
* Prefix $rgb() with ^X for skered
* Change hardcoded \003 and \030's to macros.
* Add $rgb({...}) and $rgb{#RRGGBB) (see UPDATES)
* EPIC5-2.1.7 (2011) (Cinereous) released here
* Add /set automargin_override (for skered) - always turn on automargins
* De-cruftify the /set automargin_override stuff (rb skered)
* Begin a larger project to transition (Window *) ptrs to winrefs.
* The intention is to make (Window *) a pure data object and not a linked list
* Repair regression with lineno in /set status_update (rb ce)
* Fix /on reconnect_required (doh)
* Continue the work on reducing (Window *)s outside of window.h
* More work (mostly focused on status)
* No more Window ptrs in status.c yay!
* Fix a bug with output going to the wrong window (rb fro, me)
* Fix bug with /window number (rb zlonix)
* Fix %F showing the wrong window refnum (rb zlonix, fro)
* Ensure lookup_window() is always handled for error correctly
* De-cruftify epic's install procedure.  This is for all my pkg friends!
* Remove configure --with-threaded-stdout
* Remove crutches for people without INET6 
* Remove legacy compat for people without getaddrinfo()
* Remove dead #define's in config.h
* Fix /on switch_windows (rb zlonix)
* Add $pledge() and $unveil() for openbsd (zlonix)
* Add a "newlist" type for migrating linked lists to.
* Improve handling of realpath() failures (rb zlonix)
* Make /log on fail (ie, reset to OFF) if the log can't be opened (rb zlonix)
* More improvements to window.c, refactor of /window query
* Several scripting changes by zlonix
* When writing to /log-files, check both refnum and user-refnum (rb zlonix)
* Allow adding window refnums, names, and uuids to /logs, and check them passively
* Fix /log properly showing targets for window-type logs (rb zlonix)
* Fix $winchan(#chan) not returning user refnum (rb zlonix)
* Improvements to sasl script (rb harzelein) (zlonix)
* More changes, moving towards de-listifying the window object
* Type punning project starts here...
* Add check for __attribute__((may_alias)) (gcc and clang)
* Tag all socket types with "may_alias"
* Tag all (List *) types and subtypes with "may_alias"
* List changes:
* - Use C99 union type casts to convert to and from (List *)
* - Create new List macros that use union type casts
* - Convert everything to use the macros instead of base fns
*   - /crypt, /ignore, /bind, /log, /query, 
* Alist (array) changes:
* - Remove (array_item) as a type that can be inherited from
* - Create (array_item_) as a container for a (void *)
* - Change (array) to keep a list of (array_item_s)
* - Change all the alist api's to take these new-style (arrays)
* - Convert notify lists from (NotifyList) to ordinary (array)
* - Migrate the 'ison' field from (NotifyList) out to the (Server)
* - Convert A005 lists from (A005) to ordinary (array)
* - Convert symbol lists from (SymbolSet) to ordinary (array)
* - Convert symbol api from (SymbolSet *) to (array *)
* - Convert nick lists from (NickList) to ordinary (array)
* Type punning project ends here ^^^^^
* Compile with -O2 instead of -O to satisfy pedants
* Begin removing linked list from (Window) type
* - Change window_list to _window_list in screens
* - This revealed every place we were manipulating the list
* - Change macros in input.c to not hardcode 'current_screen'
* - (This required changing INPUT_LINE to INPUT_LINE_ROW)
* - Eliminate hardocded uses of 'last_input_screen' in input.c
* When doing /window number, be sure to clear old refnum! (rb zlonix)
* Add sanity check for direct window lookups
* Have $serverwin() return user refnum not internal refnum (rb ce)
* Fix the sanity check just above (rb ce)
* Re-fix $serverwin() (rb ce)
* Changes to color script (zlonix)
* Add 'stringify.c', a program to convert data to a C string.
* Add support for grabbing configure params in info.c.sh
* Add support for grabbing $CC -v output in info.c.sh
* Add $info(y) and $info(z) (see UPDATES)
* Replace $info(y) and $info(z) with $info(z:*) (see UPDATES)
* Add all this z-stuff to the -v cli
* Use 'id -u -n' instead of LOGNAME in info.c.sh
* Create (union SSu) to capture all (struct sockaddr*) types
* Migrate all internal APIs to use (SSUs) to avoid type punning
* This makes our socket code all c99-compliant.
* Fix typo (reported by ce, fro)
* Fix another typo (reported by ce)
* Fix bogon with /assign output (rb ce)
* Reduce warnings
* Eliminate final warnings with -Wwrite-strings  -W -Wall -Wextra 
  (except -Wno-pointer-sign -Wno-unused -Wno-unused-parameter)
* EPIC5-2.1.8 (2052 - Decoupage) released here
* EPIC5-2.1.9 (2053 - Decoupage) released here
* Eliminate final warnings with scan-build (clang's static analyzer)
* Eliminate found warnings with clang's undefined behavior checker
* Remediate the rest of clang's static analyzer's findings.
* Fix slurp_elf_file() (rb fro)
* Change SIZE_T_MAX to SIZE_MAX (rb ce)
* Handle dequoting a single quote (detected by ubsan)
* More changes to avoid undefined behavior and zlonix's "impossible bug"
* EPIC5-2.1.10 (2059 - Casuistry) released here
* Always call alists 'alist's instead of 'array's
* Add a #define UINTMAX_HEX_FORMAT for pointers
* Change (List)s to have a data pointer rather than inheritance
* This removes a major remaining type punning issue
* Remove '_window_list_end' from screens.  Determine it on the fly.
* Add get_screen_bottom_window() to replace '_window_list_end'
* Change (Crypt) from a (List) type to a data object for List
* Change various crypt.c functions to take a straight (List).
* Change various crypt.c functions to create and store a (Crypt) in (List)
* Make (WNickList) private to window.c, use ordinary (List)s ordinarily
* Change window's 'waiting_chans' and 'nicks' ordinary (List)s
* Add ARAs - "automatically resizable arrays"; directly addressable arrays
* Comment out bucket_(var|cmd)_alias and bucket_builtin_* to avoid warnings
* Except bucket_builtin_variables() which is the only one actually used!
* Convert (Ignore) from a (List) type to a data object for List
* If a panic() happens during shutdown, then just go ahead and exit.
* Convert (Binding) from a (List) type to a data object for List
* Convert (Logfile) to use a plain old (List) to hold target names.
* Rename 'invislble_list' to '_invisible_list' for future deprecation
* Make everything using invisible list go through a function.
* Split 'delete_window' into 'unlink_window' and 'delete_window_contents'
* And make those two take refnums instead of a window ptr.
* /fe ("" .) foo {echo $foo} with /xdebug dword (rb ce)
* Fix /window swap_others (skered)
* Un-break $unveil() with no arguments (rb zlonix)
* Remove configure checks for sysctlbyname(), <sys/sysctl.h>
* Fix warnings from raspbian (rb zlonix)
* Don't include <sys/syctl.h> (not used) (rb zlonix)
* Do #define _GNU_SOURCE 1 for slackware (BAH!)
* Begin untangling the "signed pointer mess"
* Generally this means:
* - (char *), not (unsigned char *) is the "generic type" in C params
* - Pointer parameters have to have *equivalent* types, not just *compatible* types.
* - The type of "a bunch of bytes" is always (char *), not (unsigned char *)
*   - Even though (char *) is not 8 bit clean.
* - Type type of literals is always (char *), not (unsigned char *)
* - So don't use (unsigned char *) for params unless the thing is NOT a BoBs.
* - So DO use (char *) and cast it on both sides of the call.
* - Don't have (const unsigned char **) params to modify a pointer
*   - Prefer (const unsigned char *) and return a (ptrdiff_t)
* Change (Crypt) 'passwd' to unsigned because OpenSSL wants it that way.
* Eliminate all warnings from -Wpointer-sign 
* - Mostly by eliminating nearly all uses of (unsigned char *)
* Eliminate all warnings from -Wunused
* - But not from -Wno-unused-functions or -Wno-unused-parameter
* Remove many spurious casts to and from (void *) (c99-ism)
* Fix warnings found by wider testing
* EPIC5-2.1.11 (2071 - Adynaton) released here
* Replace the historical (u_32int_t) with the c99 (uint32_t)
* Remove the now-unused 'hash' field in alist data items 
* Remove accommodations for the long gone Interix system
* Don't hide __A() and __N() from clang, which supports them just fine
* We don't need to cover for systems that don't have memmove()
* We should cast the retval of alloca() within LOCAL_COPY().
* Stop redefinining NULL
* Remove #ifdef HAVE_SSL and HAVE_ICONV since they're mandatory now
* Build 'stringify' using $< and $@ (for separate builds) (rb zlonix)
* Remove the c99 macro shims for (List) and rationalize the API
* Remove the use of c99 macro shim "MAY_ALIAS" since it's untrue now
* Move "reconnect.orig" to "reconnect.old" (rb zlonix)
* get_server_protocol_state() can return -1 -- handle properly (rb zlonix)
* Guard bogons in set_server_protocol_state()
* Have info.c.sh.in use @builddir@ instead of @srcdir@ (zlonix)
* Add add_item_to_list() for List management, fix callers
* Don't let user create too many windows (rb ce)
* Fix configure check for raspberry pis with bad python (rb zlonix)
* Fix window refnum bogon (rb zlonix)
* EPIC5-2.1.12 (2078 - Secondment) released here
* When doing target searches, don't require global targets to have server
* Fix /query, particularly for dcc chats (rb fudd)
* Fix a null deref found by clang static checker (it was unused code)
* Fix widening when window is /clear and /window scrolladj off (rb skered)
* More conversions of (Window *) to int refnums
* Now the (Window) refers to its neighbors through int's! Huzzah!
* Now Screen's window list holds just an int to the head!
* Now the invisible list is just an int to refer to the head!
* This means we don't need to expose (Window) to #include "window.h"
* Add $ctcpctl(SET x ACTIVE 0|1), $ctcpctl([IN]ACTIVE)
* Add /ctcp_cloak and /ctcp_uncloak to /load ctcp (rb zlonix)
* Remove size limits on $repeat (rb ce)
* Fix CTCP CLIENTINFO (x) (rb zlonix)
* Fix swap_window()  (rb fro, zlonix)
* Make _invisible_list an int and not a pointer. yay!
* Fix bug with /server showing p-addrs on connect (rb zlonix, skered)
* Continue converting internal window.c functions to refnums
* More conversions of internal window.c functions to refnums
* Complete conversion of internal functions from (Window *) to (int). Yay!
* Create screen restful api (well, the getters at least)
* Sunset global "Screen *screen_list" in favor of get_screen_by_refnum()
* Make everything that used (Screen *) use int refnums (except windows)
* Don't have dequoter() take clue, was causing ub (sorry, ce) (rb zlonix)
* Fix screen->last_window_refnum, was wrong type (rb zlonix)
* Fix /window clearlevel (need to normalize window refnums) (rb zlonix)
* Fix ub with utf-8 detection for non-utf8 console users.
* Revert dequoter() changes above (rb zlonix, ce)
* Fix ub with decryption (rb zlonix) [this code makes me nervous]
* Try a gentler fix for the ub in dequoter()
* Add the "clear_point" per-window where you last did a /clear
* When moving the "top of scrolling" around, honor the clear_point
* The /unclear command will ignore the clear_point (backwards compatible)
* The /unclear -noforce flag will honor the clear_point
* Fix ub when decoding base64 data with invalid characters
* Add /xdebug sequence_points and %{2}P and /set status_sequence_point
* Also, $sequence_point().  This is all an easter egg.
* Create notion of "Window Attachments", that belong to the screen
* Create screen-focused API to manage "window attachments" (window list)
* In the meantime, change (Window)->_next and ->_prev to ->_next_ and ->_prev_
* Sanity check the window-based window list from the screen-based window list
* Fix bug with 'clearpoint' (rb zlonix)
* Updated reconnect script (zlonix)
* Finalize replacement of (Screen *) with (int) refnums.
* Move Screen definition inside screen.c. Yay!
* Remove unused ANSIFLAGS from Makefile
* Add $tags(), support for CAP tags (zlonix)
* Add script for CAP negotitation (zlonix)
* Add "cert" field for server descs (client-side SSL certs) (rb tjh)
* Add ability to specify client-side cert for SSL (generally)
* Move Window definition inside window.c YAY~!
* Add dont_need_lastlog_item() so windows can repudiate lastlog items
* Make /window flush_scrollback repudiate lastlog items
* That way rebuilding the scrollback doesn't make flushed things re-appear
* Fixes to above (rb zlonix)
* Fixes/improvements from zlonix for the above
* Fix handling CAP multi-prefix (rb zlonix)
* Use ctime_r() [c99] instead of ctime() [c90]
* Add /clearignore in 2.8script (rb sobriquet)
* Begin a project to clean up message_from() in dcc [sb Harz]
* Handle /redirect /cmd better so it behaves sensibly.
* Expand the range of unicode 6 emojis (from 1f5ff to 1f6ff)
* Add /on ping (rb skered)
* Fix the addition of 'git_commit' to handle releases (rb zlonix)
* Update to 'colors' script (zlonix)
* Fix /window create (rb fusion); fix ub in wserv.c
* Have configure check for crypt()
* Adapt and regenerate configure to use autoconf-2.71 (sigh)
* Make $crypt() return empty if no crypt() [rb Tilt]
* In /load history, ^U should use erase_line not reset_line. (rb fusion)
* Add /set blank_line_indicator (rb harz) -- see UPDATES
* Add $symbolctl(GET <varname> 0 BUILTIN_VARIABLE ORIG_DATA) (very much WIP!)
* Don't have configure check for <sys/fcntl.h> (sigh)
* Don't use inline expandos ($L) in /load history -- use $builtin_expand()
* When /set status_does_expandos, double-quote the injected text (rb fudd, lw)
* Fix bogus use of * in on send_public in builtins (rb lw)
* Fix antiquated/bogus use of dword in /load country
* Add make uninstall, which does its best  (rb skered)
* Rewrite /disconnect|reconnect so it behaves more reasonably (i hope) (rb CE)
* Fix a bogon with new STATUS_DOES_EXPANDOS stuff (rb wcarson)
* Add $windowctl(GET x CURRENT_CHANNEL) returns a window's current channel
* Fix where first char of continued lines didn't have attributes (rb skered)
   /eval echo $chr(3)53$repeat(500 .) for example
* Remove a debug statement harz found with /window channel
* Make window toplines honor /set automargin_override.
* Use gcc13 -fanalyzer and clang-devel scan-build (static analyzers)
* The following changes were directed by the static analyzer
* Check/use -fno-delete-null-pointer-checks in configure
* Fix pop_integer() to return correct type
* Use fseek() instead of rewind() so clang doesn't complain about errno
* Don't check a pointer after using it so as to not offend gcc13
* If you pass no args to $unshift() or $push(), get nothing back
* Fix uninitialized clue in $currchans() [this was an actual bug]
* Strip down $globi() so I can fix static analysis complaints
* Fix uninitialized variable in $hookctl() [this was an actual bug]
* Don't just assume open() doesn't fail in opento() [actual bug]
* ifdef out split_message() and friends because i don't understand
    what gcc13 is complaining about there and I don't use it
* Oh, you get the idea.  more of the same as above
* Add /window lister "refnums" (see UPDATES)
* Explore writing output using fd's rather than (FILE *)s
* Add /set auto_reconnect_delay to reconnect (skered)
* Update cJSON to a more recent version (upstream)
* Everything below is part of the RGB project.
* Change name of "256 colors" to "extended colors" to encompass RGB
* Stop hardcoding the value of internal Attribute, so it can grow later.
* Introduce the concept of "Unified Color Values" which will grow later.
  - The idea is to unify all the different number system into one 32 bit int
* Extend attributes to support 32 bit fg and bg ints
* Change the name "display attributes" to "internal attributes" for clarity
* Make sure to match up internal attributes reader and writer
* Change the name "logical attributes" to "ircii attributes", reader, writer
* Modify term_attribute() to hardcode how colors are output (for now)
* Change 'prepare_display2' to 'prepare_display_fixed_size' which is clearer
* Add $hex(<digits> <number>) which converts <number> to <digits> hex digits
* Support ^X#rrggbb,rrggbb to take RGB codes (yay! \o/)
* Change the ^[[38;2;r;g;b grokker to output RGB codes instead of 256 colors
* Change $rgb() to output RGB codes now (yay! \o/)
* Lots of internal changes to support larger Attributes, color spaces
* The above is the RGB project's first pass.  Here goes nothing!
* Fix colors not showing on topline in p_d_f_s() (rb fusion)
* Revamp ^C handling to use 256 x-colors. (yay! \o/)
* Some compilers like it when you put parens around macro params (rb fusion)
* Make the ^C color xlate table absolute (so we can use RGB later)
* Fix brain-o (rb fro)
* Make prepare_display() tolerate longer lines without going haywire.
* Don't make /set output_rewrite subject to hard size limits.
* Remove length limit on physical lines of display
* Refactor double_quote() so I can fix rogue \s on the status bar
* Add support for bg colors in $rgb(), see UPDATES
* Fix more suggestions from the nitpickers in gcc and clang
* Fix $rgb() [rb wcarson, fusion]
* EPIC5-2.1.13 (2125 - Sockdolager) released here
* ^C16 was defined and was used by lice.  sigh. (rb tjh)
* Toplines were one column too narrow (rb fusion)
* Very rudimentary support for CAP multi-prefix. more to come!
* Fix /load files
* Include new script, /load epiclogo -- a nice easter egg. :)
* Change /exec so it's fully line buffered.  This fixes /exec cat.
* Stop using "inline", since the compiler does what it wants anyways.
* Roll back the CAP support, it inteferes with the SASL script (rb skered)
* Below is the "Spring Cleaning 2024" project
* Sunset flood detection and its attendant features (see UPDATES)
* Sunset the "clue" stuff
* Sunset the "alloc tracking" stuff
* Sunset the "delayed free" stuff
* Differentiate between "quoting" ("") and "escaping" (\)
* Below is the "ircaux.c reorg" sub-project
* Categorize and sort all function decls in ircaux.h
* Review each function; GC unused functions; collapse dupes
* Comment functions to force analysis of behavior, fix bogons
* Fix normalize_filename() (rb skered, foo, fudd)
* Fix off-by-one (too short) error in dequoter() [rb fudd,lw]
* Add support for OpenSSL's RAND_bytes() API
* Stop doing all the other legacy PRNGs.
* Sunset arc4random() support, particularly the builtin stuff
* Regen autoconf with 2.72, because a 1 line change causes 125k diff!
* Fix various complaints from gcc and clang's static analyzers
* Refactor upper()/lower() to a new strmap() to reduce dup code
* Rationalize and comment stristr() and rstristr()
* Random numbers now always use openssl -- /set random_source is ignored
* Fix "long topline can be longer than status bar" (rb fusion)
* Sunset support for socks[45], including "socks5p.h"
* Stop checking for any using <ieeefp.h> unless someone can explain why not
* Sunset support for systems without job control (!!)
* Various minor ircaux.c cleanups, nothing user-facing
* EPIC5-2.2 (2135 - Sedulous) released here
* Fix /xecho -b (rb fudd)
* EPIC5-2.4 (2136 - Sedulous) released here
* Fix malloc_strcat_word()
* EPIC5-2.6 (2137 - Sedulous) released here
* Fix binary to hex encoding 
* EPIC5-3.0 (2139 - Brigadoon) released here
* Add circuit breaker if recalculate_windows gets jammed (rb Tilt)
* Fix two memory leaks; one major, one minor (thanks, valgrind!)
* Fix more memory leaks (thanks, valgrind)
* EPIC5-3.0.1 (2143 - Corrigendum) released here
* Don't disable padding for encryption/decryption (zlonix)
* Regex problems: Extended regexes don't support backrefs (boo!)
* Regex improvements: Use REG_ENHANCED for mac os x (wcarson)
* Regex improvements: Use -lregex for freebsd
* Add /1 /2 /3 ... aliases to /load altchan for window switch (zlonix)
* Use $levelctl(LEVELS) instead of list in /load tabkey.ce (zlonix)
* Updates to /load colors (zlonix)
* Updates to tabkey.jm (skered)
* GLOB_QUOTE does not actually exist
* Change notion of "away" to "away_message" [see UPDATES]
* Add notion of "away status" and $serverctl(GET x AWAY_STATUS)
* Add /exec -exit {} (rb fusion) [see UPDATES]
* Connecting to port 6697 now always forces SSL.  So there.
* If a server connection fails w/o data, it might be an SSL server
* In a server desc, a + before a port means "do ssl" like other clients support.
* EPIC5-3.0.2 (2154 - Peregrination) released here 12/2/2024
* Backport the fix for /eval echo $rgb(#2C4267)#derp from epic6.
* Fix/rewrite $uname(), (rb sob)
* EPIC5-3.0.3 (2157 - Obturation) released here 2/27/2025