forked from KermitProject/ckermit
-
Notifications
You must be signed in to change notification settings - Fork 0
/
NOTES.TXT
11776 lines (9725 loc) · 574 KB
/
NOTES.TXT
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
This is a Lynx -dump of the Kermit Project web page:
http://kermitproject.org/ckupdates.html
[1]Icon [2]The Kermit Project | Now hosted by [3]Panix.com
New York City USA o [4]kermit@kermitproject.org
...since 1981
* [5]Home
* [6]C-Kermit
* [7]E-Kermit
* [8]W-Kermit
* [9]Kermit 95
* [10]Scripts
* [11]Current
* [12]Timeline
* [13]About
* [14]Archive
C-KERMIT UPDATE HISTORY
Versions 9.0-10.0: 2011-2022
[15]Frank da Cruz
[16]The Kermit Project, Bronx NY.
Last update: Fri Oct 14 15:46:03 2022 New York time
Current development version: 10.0 Beta.05 27 September 2022
🡄 New
Current released version: [17]9.0.302 20 August 2011
[18] DOWNLOAD SOURCE CODE [19] SEE TABLE OF RECENT DEVELOPMENT
BUILDS
NEW 15 September 2022: Third Beta test of C-Kermit 10.0 for Windows now
with SSH and SSL/TLS support. [20]CLICK HERE to read about it and
download it for testing if you wish.
If you have a hardware/OS platform where hasn't been built yet, please
try to build it and then [21]send me the data for an entry in the
[22]C-Kermit 10.0 builds table. Thanks!
In-between-Beta versions are uploaded from time to time, and can be
downloaded from [23]HERE. The changes are described in the "not
released yet" section just below.
Changes since version 8.0.207 1 January 2003
Now in reverse chronological order (newest first)
Also see:
* [24]Index to all C-Kermit documentation (new July 2019)
* [25]Change logs for C-Kermit releases 1985-2011 (plain text)
* [26]Announcements of older C-Kermit releases (plain text)
Grüße aus Bronx <- (pay no attention, this is to make sure that EMACS
didn't mess up this page's UTF-8 encoding)
This page, which as of May 2022 would be about 200 pages long if
printed, was originally a plain-text change log in chronological order
(newest entries at the bottom). In May 2017 it was converted to HTML
with a [27]text-to-html Kermit script, and as of 27 July 2020 it has
been rearranged so the latest information is at the top and the oldest
at the bottom, and the formatting was improved by makeshift scripts and
by hand. All changes since July 2020 have been entered directly into
this page.
For the new Microsoft Windows version of C-Kermit, see [28]David
Goodwin's notes (updated almost every day). Betas for the Windows
version follow an independent schedule. Watch [29]THIS PAGE for news.
C-Kermit 10.0 (in development - not released yet)
Apparently rumors of FTP's death have been greatly exaggerated and --
more to the point -- that of [30]Secure FTP (FTPS). It is still
required, for example, by EDI providers such as [31]BOLD VAN, so
C-Kermit's OpenSSL support is a priority after all*. At this point,
builds work on most platforms where it has been tried (Ubuntu, Debian,
Red Hat, Fedora, Hurd, NetBSD, FreeBSD, and OpenVMS). In one case on
Ubuntu, however, it failed with "openssl/comp.h: No such file or
directory - #include <openssl/comp.h>". According to a report I found
in Google, this is fixable by "sudo apt-get install libssl-dev". See
[32]this OpenSSL.org page about SSL and TLS, which explains that
currently, SSL is really TLS (in OpenSSL, "After SSLv3, SSL was renamed
to TLS"; also see [33]RFC 7568). Note: FTPS is not to be confused with
SFTP, which is SSH. [34]A number of FTPS servers are available, both
commericial and free. For example, the free FTPS server for Ubuntu is
is called [35]vsftpd and can be installed with "sudo apt install
vsftpd". An example of a commercial FTPS server is [36]Cerberus FTP
Server 12.
* EDI = Electronic Data Interchange; VAN = Value Added Network; SSL =
Secure Sockets Layer; TLS = Transport Layer Security.
Changes since Beta.05 (newest first)...
14 October 2022:
A change to "make install" in the makefile to allow the target
directory for the Kermit binary to be specified on the 'make'
command line, e.g. "env PREFIX=/usr/pkg make install" (Peter
Eichhorn, Greg Troxel).
Listing the speeds in numeric order rather than "alphabetic"
when '?' was typed (Oct 10) was the easy part. Making a numeric
keyword table behave the same as an alphabetic one during
interactive command entry -- notably keyword completion when Esc
or Tab was typed -- was a major production. ckucmd.c now has a
new routine, nlookup(), parallel to lookup(), plus a lot of new
code in cmkey() to account for the differences between the two
formats. A side benefit is that if more numeric tables are ever
needed, adding adding them will be straightforward.
11 October 2022:
A fix to yesterday's item from SMS for Compaq C V6.4-005 on OpenVMS VAX
V7.3, which doesn't tolerate array declarations with
non-constant dimensions (these are a new feature of [37]C99 from
2000.)
10 October 2022:
With the addition of so many new serial speeds, the result of
"set speed ?" was a random pile of numbers:
C-Kermit>set speed ? Serial-port speed (bits per second), one of the following:
1000000 134.5 1800 230400 300 4000000 57600 921600
110 14400 19200 2400 3000000 460800 600 9600
115200 150 200 2500000 3500000 4800 75
1200 1500000 2000000 28800 38400 50 76800
Now it makes more sense:
C-Kermit>set speed ? Serial-port speed (bits per second), one of the following:
50 150 1200 9600 38400 230400 1500000 3500000
75 200 1800 14400 57600 460800 2000000 4000000
110 300 2400 19200 76800 921600 2500000
134.5 600 4800 28800 115200 1000000 3000000
The new code is in ckuus5.c, lines 1241-1278. If it causes
trouble, it can be deselected at 'make' time with
KFLAGS=-DNOSORTSPEEDS.
6 October 2022:
ckutio.c changes from Pali Rohár to get at the higher serial speeds
supported by newer UARTs.
+ ckutio.c ttsspd() was missing the new high-speed baud rates
(thus they could be recognized by the command parser but not
actually used). The new speeds are 500000, 576000, 614400,
921600, 1000000, 1152000, 1500000, 2000000, 2500000, 3000000,
and 4000000.
+ Supplied a missing "return(1);" statement in the USETCSETSPEED
case in ttsspd().
Pali said "I need to transfer files over UART with highest
possible speed. I'm developing software which is running on
embedded devices and for transferring software I can use only
UART (bootstrapping and debugging). My hardware supports
baudrates up to 6000000 baud and also I have USB <-> UART cables
which support such high speeds. Modern hardware now supports
UART at really high baudrates, so why not to use it for
decreasing final transfer time? Bootloader U-Boot has support
for kermit protocol and can receive files over UART at arbitrary
baudrate supported by HW. So the only thing which I need is
software on my computer which can configure UART tty device to
higher speed and then send over it files via kermit protocol."
He also removed an extraneous semicolon from ckutio.c line 501:
#define LOCK_DIR "/var/spool/locks";
5 October 2022:
+ The ability of C-Kermit's DIRECTORY command to handle multiple
file specifications, e.g.:
dir makefile README ck[cuvw_]*.[cwh]
has been broken since C-Kermit 9.0 from 2011. Fixed now.
+ C-Kermit's TOUCH command (which has many options) has been
totally nonfunctional since the same date. Also fixed now.
3 October 2022:
Patch from SMS for OpenSLL (ck_ssl.c):
***************
*** 49,60 ****
/* Different major/minor version or development version of OpenSSL
* means ABI may break compatibility.
* Modified by Adam Friedlander for OpenSSL >= 1.0.0
*/
! #define COMPAT_VERSION_MASK 0xffff000f
#else
/* Different major/minor/fix/development (not patch) version of OpenSSL
* means ABI may break compatibility. */
! #define COMPAT_VERSION_MASK 0xfffff00f /* MNNFF00S,
major+minor+fix+status */
#endif /* OPENSSL_100 */
#ifdef OPENSSL_098
--- 49,61 ----
/* Different major/minor version or development version of OpenSSL
* means ABI may break compatibility.
* Modified by Adam Friedlander for OpenSSL >= 1.0.0
+ * (See opensslv.h> for OpenSSL version encoding details.)
*/
! #define COMPAT_VERSION_MASK 0xfff0000f /* MNNffppS, major+minor+status */
#else
/* Different major/minor/fix/development (not patch) version of OpenSSL
* means ABI may break compatibility. */
! #define COMPAT_VERSION_MASK 0xfffff00f /* MNNFFppS, major+minor+fix+status */
#endif /* OPENSSL_100 */
29 September 2022:
Patches from Greg Troxel (most of these were for packagers, not me):
+ ckuath.c at about line 5530:
if ((r = krb5_mk_rep(k5_context,
+#ifdef HEIMDAL
+ &auth_context,
+#else /* HEIMDAL */
auth_context,
+#endif /* HEIMDAL */
&outbuf))) {
+ ckupty.c at about line 91:
Always use termios, never sgtty.h.
\todo Explain this more clearly.
This patch appears to be regularizing the use of TERMIO, following
the package's inclusion of mk/termcap.buildlink3.mk. This is
contrary to upstream's approach which uses each systems's native
libs. Therefore, this patch should not be submitted to upstream.
and then a lot of "#define USE_TERMIO" directives removed.
Since I don't understand this patch, instead of removing the
directives I put them within "#ifndef TERMIO_PATCH..#endif,
which is not defined, but can be if needed.
+ ckuusx.c at about line 100: "This patch needs an explanation,
and perhaps trying to build without it." Pending an
explanation, I made it conditional on
"#ifndef NO_INCLUDE_BSD44_ERRNO..#endif, which is not defined,
but can be if needed.
+ A *big*, complicated patch for the makefile:
o Don't override DESTDIR
o Don't override prefix
o Don't install the mysterious kermit-sshsub
o Don't install kermit.ini in bindir, because it doesn't
belong there and because (yay!) it is empty, and people
don't need empty templates
o Use DESTDIR harder when installing
o Get K5LIB, K5INC, SSLLIB and SSLINC from pkgsrc.
And some other assorted patches:
o s/-lgssapi/-lgssapi_krb5/ on netbsd+krb5*
o Add $(LIBS) to link command on
solaris2xg+openssl+zlib+pam+shadow
o s@$(K5INC)/krb5@$(K5INC)/kerberosv5/ on
solaris9g+krb5+ssl
o On linux get HAVE_LIBCURSES and HAVE_CURSES from pkgsrc
(with the curses include and library pathes coming from
BUILDLINK_*FLAGS).
This one is one is still in the in-basket.
Greg's patches can be seen here:
[38]https://www.kermitproject.org/ckpatches/filelist.html
28 September 2022:
A fatal compilation error, evident (so far) only on HP-UX 10: in
ckuusr.c at line 12345, see this code:
#ifdef TYPEINTERPRET
type_intrp = 0; /* Always start with this off */
#endif /* TYPEINTERPRET */
Move it down about 13 lines, below "#endif /* UNICODE */".
This assignment statement is in the middle of a variable
declaration list in the docmd() function. This should be an
error everywhere but this code compiled cleanly on 25 different
builds on other platforms, some of them with the strictest
modern C compilers including clang and gcc -Wpedantic.
C-Kermit 10.0 Beta.05 (27 September 2022)
27 September 2022:
1. Moved BETATEST symbol definition from ckcmai.c to ckcdeb.h so it
can be referenced in all C-Kermit modules, and moved
#include ckcdeb.h higher up in in ckcmai.c, above the first
#ifdef BETATEST reference.
2. ckcdeb.h: Added NOSYSLOG to NODEPRECATED list (syslog is
"deprecated" too).
3. Updated the NEWS command.
4. Changed version designation from Pre-Beta to Beta and version date
to 27 September 2022.
5. ckuus3.c 12328, printf %s missing an argument.
6. ckuus5.c 8037, corrected printf %d to be %s.
7. ckuus7.c 13110, corrected printf %ld to be %d.
26 September 2022:
1. ckcdeb.h: Removed the arrow-key feature from all platforms except
Windows. Support for the API that detected arrow-key strokes is
disappearing from one libc after another, so I might as well do it
now for everybody. It's a small change near the top of ckcdeb.h,
which (despite its name) is C-Kermit's primary header file. I
removed -DNOARROWKEYS from all the makefile targets (and
android.mk) that included it because now it happens automatically.
If your platform (e.g. NetBSD or VMS) supports the API and you want
the feature back, build C-Kermit with KFLAGS=-DDOARROWKEYS.
2. ckcmai.c: Straightened out some confusion with the program herald.
There are two routines: makever() in ckcmai.c, and herald() in
ckuus5.c. makever() creates PART of the version string but doesn't
print anything. herald() creates another part of the version string
and then prints both parts and some other stuff, and it also
defines the builtin \v(herald) variable. For a hard-to-explain
reason, we needed to have the herald text and \v(herald) defined
BEFORE the initialization file was executed, but then not printed
until AFTER the command-line arguments were processed so
"kermit -H" (skip printing the herald) still worked. This required
moving chunks of code from herald() to makever(). Modules changed:
ckcmai.c, ckuus5.c, and ckuusy.c.
3. ckcnet.c: "make xxx -DNORLOGIN" generated tons of errors. All the
rlogin-related functions needed to be protected by
#ifndef NORLOGIN..#endif. Lines 7180-7567: rlog_ini(), rlog_ctrl(),
rlog_oob(), rlogoobh().
4. ckuusx.c line 96: added prototypes for ck_tn_encrypting() and
ck_tn_decrypting().
5. ck_ssl.c ck_ssh_is_installed(): Added "return(0);" outside the
#ifdefs to squelch "non-void function does not return a value"
Clang warning.
6. ckcnet.c: in http_security(), cipher =
SSL_get_current_cipher(tls_http_con); needed to be:
cipher = (SSL_CIPHER *)SSL_get_current_cipher(tls_http_con);
7. ckuath.c: Added prototypes for encrypt_is_decrypting(),
encrypt_request_end(), and get_crypt_table().
8. ck_crp.c: about line 3876: removed "extern int
encrypt_debug_mode;". It is not extern and it was already declared
above.
With changes 4-8 listed above, SSL builds generate no errors or
warnings in OpenSSL 1.1.1d-fips 11 Feb 2013 (Red Hat 6.1) nor in
OpenSSL 1.1.1f 11 Feb 2020 (Ubuntu 20.4.1). A few warnings are
generated in OpenSSL 1.1.f 31 Mar 2020 on NetBSD 9.2. In all three
cases compilation and linking succeed and a C-Kermit executable is
produced.
25 September 2022:
* ckufio.c line 2486 "} else if errno {" should have been
"} else if ( errno ) {" (fatal in AIX 15).
* ckufio.c line 2474 "debug(F110,"zchki stat errmsg",ck_errstr(),"");
final argument should have been 0.
* ckctel.c lines 4679, 4681, 6014, 6221: fixes to address Clang
10.0.1 complaints about signed vs unsigned char in Telnet code (but
why does it complain at all if it was given the "-funsigned-char"
directive?). This was also a problem in VMS.
* ckuusr.c: changed 'if (s == "")' to 'if (s == (char *)0)' to
silence Clang warnings.
* ckuus3.c SHOW DIAL: suppressed "dangling else" warnings from Clang.
* ckuus4.c in SHOW X25, SHOW PAD, SHOW TCP, SHOW TELNET, SHOW
NETBIOS, SHOW NETWORK, etc etc: suppressed 155 "dangling else"
warnings from Clang.
* ckuus5.c at line 6915 is "} else {" and Clang insists this is a
dangling else. I just don't see it. This was the only Clang warning
in ckuus5.c.
* ckuus6.c, "fixed" 8 dangling else's (in quotes because "dangling
else" was not a crime when C-Kermit was first written. The
structure and symantics of the IF statement were clearly spelled
out by Kernighan and Ritchie. What good is a programming language
that changes out from under its installed software base?) With all
this C-Kermit compiles with gcc -Wpedantic with no errors or
wanings and with Clang 10.0.1 without errors and almost without
warnings (there is still [39]this one but really, so what?).
24 September 2022:
* Merged David Goodwin's Windows changes from the past several months
into my code, a large change involving 26 files: ckcasc.h,
ckcdeb.h, ckcfn2.c, ckcfns.c, ckcftp.c, ckcker.h, ckcmai.c,
ckcnet.c, ckcpro.w, ckctel.c, ckcuni.h, ckuath.c, ckucmd.c,
ckudia.c, ckuscr.c, ckuus2.c, ckuus3.c, ckuus4.c, ckuus5.c,
ckuus6.c, ckuus7.c, ckuusr.c, ckuusr.h, ckuusx.c, ckuusy.c,
ckuver.h. The changes are listed on David's change log, which is
here:
[40]http://www.ext.zx.net.nz/software/notes/kermit95/#updates.
* [41]Arrow-key support... The C-Kermit command parser has a
scrollback buffer, and at the C-Kermit prompt you could always (and
still can) use Ctrl-P to scroll up (to recall previous commands)
and Ctrl-N to scroll back down. In C-Kermit 8.0 (2004) I added the
ability to do this also with with the Up-arrow and Down-arrow keys,
as people might expect. This relied on a somewhat obscure API. A
few years ago this API was "deprecated", at least in Glibc. Now it
seems to have been totally removed in some Linux distributions, and
as a consequence C-Kermit builds fail. So I have to remove this
feature. Honestly, I have no idea how widespread the problem is,
but I do know it's present in Linux (on some, but not all,
distributions; for example I see no problems on Ubuntu 20.04.1) and
in Android. So to start I'm removing it in Linux and Android:
+ Before removing it, builds OK on Ubuntu 20.04.3 and arrow keys
work
+ make linux KFLAGS=-DNOARROWKEYS builds OK and arrow keys don't
work
+ ckcdeb.h has arrow-key ifdefs
+ but so does ckucmd.h, why?
o Removed these from ckucmd.h
o Built normally ok, arrow keys work ok.
o Built again with NOARROWKEYS, ok, and arrow keys don't
work.
o So that clause did not need to be in ckucmd.h, so I
removed it.
+ Added -DNOARROWKEYS for Linux.
+ If you want to build for Linux *with* arrow-key support, do
"make linux KFLAGS=-DOARROWKEYS".
+ Added -DNOARROWKEYS to android.mk.
* ALPINE LINUX HELP NEEDED: A user of [42]Alpine Linux (with [43]musl
libc) reports that this C-Kermit version, although it builds
normally ("make linux") and without complaint, does not work right:
command keystrokes are not echoed until the Enter key is pressed.
But without -DNOARROWKEYS, it doesn't build at all because the
"obscure API" isn't there. Can anybody with Alpine Linux lend a
hand?
* Added comments to ckucmd.[ch] about its misnomer (it's really for
all platforms, not just Unix).
* Added askmore() (more-prompting) to COPY /TOSCREEN.
* SHOW FILE command: if download directory not defined, say "(your
current directory)" instead of "(none)" (ckuusr.c).
* Checked what happens if I give CK a SET SEND PACKET 10 command and
then send a file: it works perfectly - S and F packets are not
truncated but data packets are the requested length.
* HELP FUNC EVALUATE... improved help text (ckuus4.c)
* \v(herald) was wrong, I fixed it, ckuus5.c: herald() routine.
* ckcfn2.c: logpkt() - added a comment explaining the packet-log
format.
* New builtin variable \v(fullversion) = "10.0.400 Beta.05"
* Added discriptive comment heading to ckuus5.c: cmcvtdate()
* Adjusted \fcvtdate() to report date only if format arg is negative.
* Adjusted HELP FUNC CVTDATE accordingly.
* Corrected a glitch in HELP DATE text: ckuus2.c.
* Cleaned up NEWS command a bit but needs work: ckuus2.c.
19 September 2022:
* Added new options to the COPY command: /TOSCREEN and /INTERPRET.
Used together they do what TYPE /INTERPRET does everywhere except
Windows: it displays a file on the screen with all its Kermit
backslash-escapes replaced by their values, and it works in
Windows. The code is mainly in ckuus6.c docopy().
* I also fixed TYPE /INTERPRET so it clears the intepret bit after it
finishes. Previously every subsequent TYPE command would act like
it included an /INTERPRET switch.
* Not C-Kermit specifically but I wrote a new document that updates
the old and scattered information about Kermit packets: types,
formats, encodings, block checks, short vs long, etc, everything in
one place: [44]https://www.kermitproject.org/kpackets.html.
17 September 2022:
ckcfns.c sdata():
1. Even after the previous change, C-Kermit could send a long-format
packet that was one byte too long; fixed in the obvious way.
2. In tracking down this problem I also noticed that if I gave a SET
RECEIVE PACKET-LENGTH or SET SEND PACKET-LENGTH command, this too
could result in overlong packets in some cases. Fixed now.
14 September 2022:
ckcfns.c sdata():
1. Reduced maximum send-packet data size (spsiz) for short packets
from 94 to 90 to avoid edge cases which could cause the encoded
packet length to be out of range, i.e. not a printable 7-bit
US-ASCII character.
ckcfn2.c spack():
1. Added code to check whether Long Packet capability had been
negotiated before deciding to build a long packet.
2. Corrected an off-by-two error in calculating whether the packet
would be have to be in long format.
Before the previous two changes, file transfers from C-Kermit 10.0 (and
some of the earlier 9.0.305 developement versions) to E-Kermit could
fail. With the changes, they succeed. Also:
ckcdeb.h:
1. Disabled TYPE /INTERPRET on Windows until we can figure out how to
make it work.
ckcmai.c:
1. Changed the numeric version number from 1000000 to 1000400, where
the last three digits reflect the monotonically increasing edit
number.
23 August 2022:
* I added a new option to the TYPE command: /INTERPRET. "type
/interpret somefile.txt" displays the lines of the file with all
Kermit backslash-escapes (variable references, etc) interpreted,
i.e. replaced by their value. So for example, if you have a file
hello.txt:
Welcome to \v(herald):
\fpathname(\%0)
This message is coming to you from your C-Kermit initialization file:
\fpathname(~/.kermrc)
You can tell C-Kermit to "type /interpret hello.txt" and the result
will be something like:
Welcome to C-Kermit 10.0 OPEN SOURCE: Beta.05, 23 Aug 2022:
/net/u/1/f/fdc/beta05/wermit
This message is coming to you from your C-Kermit initialization file:
/net/u/1/f/fdc/.kermrc
* For the benefit of packagers who depended on the old version-number
format, I reinstated C-Kermit's edit number, but not for public
view. The new C-Kermit still announces itself as C-Kermit 10.0. To
see the edit number use the new built-in variable: \v(fullversion):
(~/beta05/) C-Kermit>show variable fullversion
\v(fullversion) = 10.0.400 Beta.05
(~/beta05/) C-Kermit>echo \v(fullversion)
\v(fullversion) = 10.0.400 Beta.05
(~/beta05/) C-Kermit>
Furthermore, the filenames of the tar and zip archives will be
cku400.*, not cku10.0.* as they have been since 10.0 Beta.01, for
conformity with all previous releases when they were cku300,
cku301, cku302, etc; see [45]this page). Of course "400" could be
"401" or any higher number as development progresses. Also the tar
and zip archive filenames will include the edit number, [46]as they
did before the first C-Kermit 10.0 Beta test.
* A bug that prevented C-Kermit for Windows (CKW) from including the
Beta-test in the program herald (\v(herald)) was corrected.
19 August 2022: I removed all the code that supported special version
numbers for (in chronological order) Mac Kermit (circa 1985), Kermit/2
(for OS/2), and Kermit 95 (for MS Windows). From now all C-Kermits will
identify themselves in the same way, for example:
C-Kermit 10.0 OPEN SOURCE: Beta.05, 19 Aug 2022, for NetBSD 9.2
(64-bit)
17 August 2022: The [47]second Beta test of C-Kermit for Windows
(formerly known as Kermit 95) was released. This work was done by
[48]David Goodwin in New Zealand, and any changes he had to make to the
non-Windows-specific modules will be incorporated into Beta.05.
Meanwhile more Beta.04 builds on platforms where it was tested
previously would be most welcome: macOS (including old versions),
HP-UX, MINIX, Solaris versions before 11, etc, not to mention platforms
where it has not yet been tested at all: FreeBSD, OpenBSD, AIX, plus
any discontinued OS's that are still running somewhere: IRIX,
Tru64/Digital Unix, 4.xBSD, NeXTSTEP, System V, DG/UX, SCO, QNX, SINIX,
SunOS, Xenix, [49]etc etc).
C-Kermit 10.0 Beta.04 (3 June 2022)
In the (now) time-honored tradition of releasing a second Beta just
hours after the first, here is Beta.04 (the curse of the odd-numbered
Betas?).
In Beta.03, two compilation errors that I fixed repeatedly -- at least
one of them fatal -- somehow kept coming back. Senior confusion, no
doubt... editing or uploading the wrong copy of the file. You can see
why I'm anxious to get out of this business! The corrections for
Beta.04 are:
1. ckctel.c:
tn_ssbopt(TELOPT_NEWENVIRON,TELQUAL_SEND,(CHAR *)request,
strlen((CHAR *)request)); /* 2022-01-27 */
should be:
tn_ssbopt(TELOPT_NEWENVIRON,TELQUAL_SEND,request,
strlen((char *)request)); /* SMS 2022-06-03 */
Note EVERY makefile target should include the equivalent of
gcc/clang -funsigned-char if available. Has anybody ever actually
used *signed* chars??? (I haven't changed the makefile targets
myself yet, but readers are welcome to do this for their platforms
and report the results so I can incorporate the change where it
works.)
2. ckuusx.c:
ck_curpos(int row, col) {
should be:
ck_curpos(int row, int col) {
At least one of these (#2) prevented successful compilation on at
least one platform (Raspberry pi OS).
Incidentally, I find myself confused about pre-ANSI function
argument list syntax. I see several forms in ckuusx.c:
1. int ck_curpos(row, col) int row, col; {...}
2. int ck_curpos(row, col) int row, int col; {...}
3. int ck_curpos(row, col) int row; int col; {...}
Only the first one seems to be causing trouble in C-Kermit, even though
it was allowed in K&R C (see pp. 23, 24, 54, and 58 of the original
1978 C book). I see examples of (3) in the same book (e.g. pp. 60, 67,
78), but I don't see examples of (2) in the book, and yet when when (1)
caused problems and was changed to (2) the problem went away. For
Beta.04 I'm going to err on the side of not making too many changes.
I also have a report that constructions like "*s++;" generates "Result
unused" warnings in Clang, e.g. in ckclib.c about line 3190, but I
don't believe that these are a problem. As [50]Brian Kernighan said in
1974, "The '*s' returns a character; the '++' increments the pointer so
we'll get the next character next time around. As you can see, as we
make things more efficient, we also make them less clear. But '*s++' is
an idiom so common that you have to know it." In this case, were
toodling through a string character by character in a loop. So the
result is unused in the first iteration but will be used in the next.
The are countless instances of this usage in the code and I doubt that
the risk of changing them is worth the benefit.
C-Kermit 10.0 Beta.03
C-Kermit is loaded with TCP/IP support code: Telnet, Rlogin, and FTP
clients, Internet security methods including Kerberos and SSL, and on
and on. This code serves little purpose in 2022 because there remain
virtually no Telnet, Rlogin, or FTP servers to connect to, secure or
otherwise. Thus it would seem desirable to be able to build a version
of C-Kermit that includes no support at all for TCP/IP and its
protocols and security methods and yet still can make SSH connections
via the external ssh application. I spent the past three days on this;
it required a massive reworking of the #if[n]def structure in ckcnet.c,
ckctel.c, ckucmd.c, ckupty.c, ckutio.c, ckuus3.c, ckuus5.c, ckuus7.c,
ckuusr.c, ckuusy.c, ck_ssl.c, as well as the ckcdeb.h header file (new
-DNOTCPIP selector and improved -DNONET), and the makefile has
corresponding new targets: "make linux-notcp" and "make netbsd-notcp".
The "-notcp" builds still include support for other networking methods
like X.25, DECnet, etc, which are also pretty hard to find in 2022, so
I also added "-nonet" builds for Linux and NetBSD to exclude built-in
support for all forms of networking. All of the new targets compile
successfully and produce runnable binaries in these configurations that
can still make ssh connections:
CAPTION: C-Kermit 10.0 Beta.03, 02 June 2022: default, nonet, and notcp
builds on Linux and NetBSD.
OS and version Architecture Build Size Compiler Status Details
Linux Red Hat 6.10 x86_64 make linux 2401216 gcc 4.4.7 OK No errors or
warnings
Linux Red Hat 6.10 x86_64 make linux-notcp 1949394 gcc 4.4.7 OK No
errors or warnings
Linux Red Hat 6.10 x86_64 make linux-nonet 1918181 gcc 4.4.7 OK No
errors or warnings
NetBSD 9.2 x86_64 make netbsd 2488936 gcc 7.5.0 OK No errors or
warnings
NetBSD 9.2 x86_64 make netbsd-notcp 2030944 gcc 7.5.0 OK No errors or
warnings
NetBSD 9.2 x86_64 make netbsd-nonet 2001544 gcc 7.5.0 OK No errors or
warnings
Also, many of the compilation warnings in Beta.01-02 have been fixed in
Beta.03:
* ckuus2.c: improved "help function cvtdate" text; fixed an unquoted
backslash in "help date" text. 21 May 2022.
* ckuus2.c: clarified "help function stripx" text, 20 May 2022.
* makefile: Added -DNOWTMP to macos target to suppress "deprecated"
warnings, 19 May 2022.
* makefile: Added "linux-pedanditic" and "netbsd-pedantic" targets to
check for warnings I normally wouldn't see. 18 May 2022.
* ckctel.c, about line 4669: case TELOPT_NEWENVIRON: type casts
straightened out (again), 17 May 2022.
* ckuusx.c, stanza starting at line 4168 slightly rearranged to
squelch another warning, 17 May 2022.
* ckuusx.c, declaration of ck_curpos() and accompanying comment were
malformed, causing compilation failure, fixed 5 May 2022.
But some warnings remain. I wanted to get this Beta out today because
I'll be pretty much "away from my desk" for the next couple weeks.
Meanwhile the "install" and "uninstall" makefile targets will be
improved to handle multilevel directories without depending on
"mkdir -p" -- which isn't portable -- but not until after Beta.03.
Finally Beta.03 includes a new CKVKER.COM build procedure for VMS that
Adds support for the [51]VSI SSL3 product (from SMS).
C-Kermit 10.0 Beta.01 16 May 2022 and Beta.02 17 May 2022
[[52]Changes since Alpha.07] [[53]What's new in C-Kermit 10.0]
Beta.02 corrects two fatal syntax errors in non-ANSI-C builds affecting
only HP-UX. The rest of this section applies to both Beta.01 and
Beta.02.
The forthcoming new release of C-Kermit, expected "pretty soon" will be
called 10.0 rather than 9.0.305, not so much because it's radically
different from 9.0, but because (a) it's been over 10 years since the
previous release and (b) it'll be my final release. Afterwards it can
be further developed (or not) by the public via Github or whatever
other collaborative Open-Source development methods supplant it.
Meanwhile the previous test release, 9.0.305 Alpha.07, has proven to be
[54]quite stable. The new release should function normally on most
modern Unix variations (and hopefully older ones as well), and also on
VMS versions 5.4 through 8.4. I realize there are some as-yet
unresolved issues on Solaris but there's nothing I can do about them
without access.
WHY NOW?:
I have an infinitely long To-Do list for C-Kermit but I think
it's a good idea to release this version ASAP, simply because
the last formal release (9.0.302) fails to build on so many
platforms where it was [55]perfectly OK eleven years ago, due to
changes in the underlying APIs, shuffling around of header files
on different platforms and OS distributions, and changes in the
C language and/or compilers. In fact, previous releases WILL NOT
BUILD on most modern Linuxes due to a backwards-incompatible
change in glibc. And even when they do produce an executable, it
is only after issuing reams of warnings about constructions that
used to be perfectly legal. Unix and C badly need a "stability
layer" to keep programs working over the long term.
ABOUT TEST BUILDS:
During (and for decades prior to) the C-Kermit 9.0 development
cycle in 2010-2011, I had direct access to over [56]200
different Unix and VMS platforms for development and test
builds, not to mention the other OS families. Now I have access
to exactly three: NetBSD, Red Hat Linux, and Ubuntu Linux.
Before a proper new C-Kermit release can be made, I'll need help
from users of the other Linux distributions, and of Mac OS X,
FreeBSD, OpenBSD, Minix, Android, and whatever other Unix
varieties are still viable in the 2020s, plus (Open)VMS, as well
OpenSSL and Kerberos (especially Heimdal) programmers if those
security methods are to be carried forward.
THE C-KERMIT MAKEFILE:
The makefile has evolved from a single target (4.2BSD) in 1985
into a nearly 9000-line monster with (at this writing) over 750
targets. I haven't made any effort to "clean it up". The world
is a big place, and who can say that there aren't still people
out there running ancient versions of UNIX who might need a
newer release of C-Kermit. Anyway it's like a Unix history
museum. As is C-Kermit itself, with code to support all those
ancient OS's: Bell Labs Unix V7, AT&T SVR3, 2.9BSD (16-bit!),
Cray X/MP, DG/UX, DEC Ultrix, OSF/1, Venix, IX/370, NeXTstep,
QNX, Xenix, DYNIX, SINIX, IRIX...
ABOUT KERMIT 95:
Almost all the changes noted in this document were made after
the still-current release of [57]Kermit 95 for Windows, 2.1.3 of
1 January 2011, which is based on C-Kermit; in fact it is the
Windows version of C-Kermit, similar the Unix version and VMS
version. Thus all the fixes and improvements described here are
missing from K95 2.1.3 of 1 January 2011, but will magically
appear in [58]any new release based upon the current C-Kermit
source code.
C-Kermit 10.0 Beta.01-02 changes since Alpha.07 [59]DOWNLOAD
Aside from the new version number, the changes since Alpha.07 are
modest.
|> New features
* Serial-port speed selections for 1000000, 2000000, 2500000,
3000000, 3500000, and 4000000 bps, suggested by Pali Rohár. The new
high speeds have not been tested because I no longer have a
computer with serial port.
* New VDIRECTORY command with 1-letter synonym V, a convenient alias
for the DIRECTORY command (and a familiar one to old [60]DEC-20
hands) (the very first Kermit program was written on the DEC-20 in
1981).
* New HELP COMPACT-SUBSTRING command to show the syntax for the
compact substring notation that was added in C-Kermit 9.0.300.
* HELP text improved for GREP, TRANSLATE, TOUCH /MODTIME, FREAD
/TRIM, FUNCTION DIRECTORIES, FUNCTION FILEINFO.
* New -DNODEPRECATED parameter for makefile KFLAGS to disinclude FTP,
Telnet, and RLOGIN clients plus WTMP logging, all "deprecated" now.
This saves only about 200K in the executable size.
* New Makefile targets: New "list" target to list all targets and
"count" target to show how many targets there are.
|> Bugs fixed
* (Beta.02 only) ckuusx.c, ckufio.c: correction of syntax errors
affecting only non-ANSIC-C builds.
* ckufio.c: Bug fixed affecting -DNOUUCP builds (such as Mac OS) when
receiving a file in which C-Kermit created a bogus empty backup
file (e.g. bug.txt.~1~). Reported and diagnosed by MacPorts port
maintainer Lin Dongyu.
* ckcfns.c, ckcfn2.c, ckcfn3.c, ckcpro.w: SET SEND PACKET-LENGTH
applied to all packets when it should have applied only to Data
packets, now it does [61]details here.
* ckuus3.c: Bug fixed in S-Expression parser; "if (xx = 0)" should
have been "if (xx == 0)" (did you know that C-Kermit had a
[62]mini-LISP iterpreter built in?... [63]What day is Easter in
2033?)
* ckcfns.c: The 'debug(F110,"sipkt rp","",rp);' statement in sipkt()
had a bad argument list all these years.
* Extraneous line in "help function tablelook" removed.
* SET HOST command switch /TIMEOUT: was removed because the
supporting code was never written.
* Top-level DEBUG command that was added in C-Kermit 9.0 was removed
because it never did anything and there was no help text for it.
|> Compiler warnings hushed
... most of them issued only by the very picky Mac OS Clang compiler:
* ckcftp.c: changed a long if-else-if.. (dangling else) sequence to a
switch
* ckctel.c: changed:
tn_ssbopt(TELOPT_NEWENVIRON,TELQUAL_SEND,request,
strlen(request));
to:
tn_ssbopt(TELOPT_NEWENVIRON,TELQUAL_SEND,(CHAR *)request,
strlen((CHAR *)request)); /* 2022-01-27 */
in hopes of silencing some "Pointers are not assignment-compatible"
and "Argument #1 is not the correct type" warnings on a platform I
don't have access to (HP-UX).
* ckcpro.w: fixed 1 dangling else
* ckuusr.c: fixed 7 dangling elses
* ckuus2.c: fixed 1 dangling else
* ckuus3.c: fixed 10 dangling elses
* ckuus4.c: fixed 67 dangling elses
* ckuus5.c: fixed 1 dangling else
* ckuus6.c: fixed 1 dangling else
* ckuus7.c: fixed 1 dangling else
* ckuusx.c: Fixed several dummy ck_curpos() declarations to suppress
warnings.
* ckuusx.c: fixed 2 extraneous parentheses and 1 dangling else
* ckcfn2.c: fixed 1 dangling else
* ckutio.c: fixed 1 dangling else
* makefile: added -Wdeprecated-declarations to macos target (for
logwtmp)
"Dangling else" is (or was) perfectly legal when used correctly; the C
language was originally designed for use by people who knew what they
were doing and was thoroughly documented by its authors, Kernighan and
Ritchie, in a book (two really: original C and ANSI C). It makes no
sense to keep changing this or any other programming language out from
under all the millions of programs that have already been written in
it.
C-Kermit 10.0: Brief summary of new features since 9.0.302
* An [64]essential adaptation to a change in Glibc 2.28 that broke
C-Kermit and caused several major Linux distributions to drop it.
* SET SPEED 1000000, 1500000, 2000000, 2500000, 3000000, 3500000, and
4000000 for high serial-port speeds on platforms that support them.
* Numerous updates for VMS/OpenVMS operating systems from 5.4 to 8.4,
so it is not orphaned.
* Adaptation to Android ([65]note) ([66]build)
* [67]Unix only: New ability to run Kermit scripts in a pipeline, and
to otherwise behave as a typical stdin/stdout/stderr program
(example: the [68]html script).
* New [69]CHANGE command for changing strings in external files. Like
when you have a website with hundreds of pages in a whole directory
tree that link to another website whose URL changed.
* Unix makefile: new target make linux-nodeprecated to build C-Kermit
without "deprecated" features such as FTP, Telnet, Rlogin, Wtmp
logging, and ([70]explained below) arrow-key support.
* And... the [71]guts of the command processor were almost totally
rewritten to allow IF-command and function arguments to be entered
in a natural way. Sounds scary but I tested the result by using it
heavily over 17 months.
Other changes:
* TOUCH /MODTIME:xxx, like the Unix 'touch' command, sets a file's
date. Works on single files, multiple files, and directory trees;
many selection criteria are available.
* Locale support for date formats, day and month names, system error
messages, currency notaion, sorting and collation behavior, etc,
plus the new functions \fdayname() and \fmonthname() that return
the full name of the given day or month in the locale's language:
[72]locale.html, [73]remind.html.
* New variables: \v(year) = current year, \v(month) = current month
(three letters), and \v(nmonth) = current month (numeric) to
complete the set that already included \v(date), \v(day), and
\v(nday), with \v(date), \v(day), and \v(month) rendered according
to locale.
* New IF conditions: NEQ, LLE, LGE, BINARY, TEXT.
* Parsing of some REMOTE commands were broken, now fixed.
* New (ECHO xxx) command for use within [74]LISP S-expressions.
* New \ffileinfo() function to get all the information available
about a given file, used by the [75]Photogallery script.
* DIRECTORY /BRIEF /EXCEPT:xxx fixed (required for [76]Photogallery),
e.g. "dir /brief /except:*-[tr].jpg /output:IMAGES *.jpg"
* New \ffilecompare() function (tells whether two files are identical
or differ, used in the [77]renamejpgs script).
* Some new date formats for \fcvtdate(): [78]photogallery.html,
[79]remind.html.
* In response to Unix full path names getting longer and longer all
the time: Improved fullscreen file-transfer display to show user's
login directory as ~/ and to truncate too-long lines from the left
rather than the right.
* The current directory shown in C-Kermit's default prompt now also
uses ~/ notation to save space.
* Numerous code changes to integrate with [80]Kermit 95 source, a
project that was active in 2013 but never completed. If you would
like to have C-Kermit for Windows (previously known as Kermit 95 =
K95) and you are a Windows programmer please ([81]CLICK HERE) to
see how you can help.
* Numerous adaptations to newer OpenSSL versions, but more work is
needed if anyone is actually going to make SSL connections with
C-Kermit.
* Countless fixes and adaptations to newer Unix platforms, libraries,
and C compilers. Described below from [82]HERE to [83]HERE... about
2000 lines of text. And also in the [84]abbreviated edit history
found in the no-longer-appropriately named [85]C-Kermit Daily
Source Archive page. This type of pointless busy work will never
end.
Reminder: details of each built-in function are shown by C-Kermit's
HELP FUNCTION name command, e.g. "help function cvtdate" (or more
briefly, "h fun cvtd").
Current and pending issues
Version number
The new version number, 10.0, is a change in format. Previous
version numbers had three parts, e.g. 9.0.304
(major.minor.edit), the new one follows the modern two-part
convention.
However, "10.0" also pushes the number of digits in the built-in
\v(version) variable from six (90304) to seven (1000000)
(built-in \v() variables go back to about C-Kermit 5A(178),
1992, 30 years ago at this writing). Scripts that use the
\v(version) variable in comparisons, e.g.
if < \v(version) 900300 exit 1 "FATAL - C-Kermit 9.0.300 or later required."
should be sure to use the numeric comparison operators (=, <,
<=, >, >=, !=) and not the lexical ones (LLT, LLE, LGT, LGE),
which worked for version number comparisons until now because
they were all six digits.
Future minor versions of C-Kermit should be 10.01, 10.02, etc
(in case there might be more than ten of them), and the next
major version should be 11.0. Note to future developers:
C-Kermit's version numbers and dates are set near the top of
ckcmai.c.
Glibc conflicts
C-Kermit has to multiplex simultaneous keyboard and
communications i/o. The code for this has evolved over nearly 40
years at this writing and it's rather complex. A big goal from
the beginning was efficiency because in the early days Kermit
might have been running on a very slow computer. Thus C-Kermit
uses the buffered fopen()/getc() interface for less context
switching than the bare metal open()/read() interface for each
character. Kermit's approach was fine until I added support for
[86]arrow keys in version 8.0 in 2003. Arrow keys are different
from regular keys in that they generate multiple bytes instead
of a single byte. So when there is a keyboard event Kermit has
to peek ahead in the keyboard buffer to tell the difference, and
if it's an arrow key, then Kermit "does something" rather than
just transmitting the byte sequence, e.g. recalls the previous
command. So far so good. But the API for peeking ahead is
apparently offensive to the glibc people, and they are intent on
removing it. The first step took place with (I think) glibc 2.28
in 2018 and the result became manifest in 2021 as various Linux
packagers like Debian and Ubuntu found that the then-current
source C-Kermit code failed to compile. A workaround was found
that fixed the problem, but the Gnu people don't approve of it
and are determined to remove all possible ways of "poking around
in stdio internals on *any* platform". They say that they will
"consider" adding "musl-compatible __freadahead", whatever that
is, maybe before they pull the plug on the current setup, maybe
not. So the day will come when C-Kermit breaks again and then
there will be four possibilities:
1. Give up on arrow keys and rebuild C-Kermit with -DNOARROWKEYS
(this has always been possible) or by adding -DNOARROWKEYS to
the CFLAGS of any makefile target where glibc is used (e.g.
[87]Linux, Hurd, and perhaps FreeBSD and NetBSD).
2. Change thousands of lines of code to do single-byte instead of
buffered reads as the Gnu people suggest, which will kill
performance on old and slow platforms;
3. Take advantage of the new __readahead thing (if it's
appropriate) but only on platforms that have it, keeping the
original readahead method for those that don't, via #ifdefs;
4. The Linux application packagers will drop C-Kermit again.
In the great scheme of things maybe arrow keys aren't so
important, but who really knows? And then what happens when they
change something else? The Gnu folks have a very narrow view.
C-Kermit is not just a Linux program; in fact it predates Linux
by six years. C-Kermit is portable among at least [88]nine
different operating system families and at least [89]190
different Unix varieties, the vast majority of which do not have
Glibc. How can a total rewrite of C-Kermit's terminal i/o be
tested on all those platforms? C-Kermit's code has been
painfully, scrupulously designed to be portable among all those
platforms. Most of them might be "legacy" now but that does not
mean that they don't still exist and that people and companies
and schools and government agencies don't depend on them for
vital functions.
In my view it is a CRIME to change an API when unknown numbers
of programs rely on it and unknown numbers of people could
depend on those programs. The entire world increasingly depends
on software written in C for Unix, and particularly Linux. The
absolute TOP priority for any new release of Linux or C or its
libraries must be to preserve backwards compatibility so
existing programs continue to compile, link, and work. This was
a priority back in the days when software (including compilers)
was mainly written by paid professionals who were responsible to
-- and in touch with! -- their users. Today's Wild West software
culture is not an improvement. Meanwhile I added a new target to
the makefile: