home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / archives / ckc190.zip / ckcker.2do < prev    next >
Text File  |  1994-11-12  |  25KB  |  511 lines

  1. CKCKER.2DO                                                          -*-text-*-
  2.  
  3.                  C-KERMIT TO-DO LIST
  4.  
  5. Most recent update: Mon Sep  5 14:49:20 1994
  6.  
  7. Ideas for future releases of C-Kermit (in no special order):
  8.  
  9. *****
  10. Let GETC also store into long variable (macro) names, like MSK.
  11.  
  12. Put OPEN READ (etc?) files on a stack -- hyperlinks and all that...
  13.  
  14. Remove calls to ttopen() from ckuusy.c.  See comments in ckuusy.c.
  15.  
  16. Don't use [...] in default prompt, since it is an NRC character.  Or maybe
  17. add IF NRC and underlying support (isnrc(charset))...
  18.  
  19. Allow arithmetic expressions (\feval() syntax) within array subscript
  20. brackets.  Maybe also in FOR-loop controls?
  21.  
  22. Add SET SERVER LOGIN and supporting code.
  23.  
  24. In the UNIX version, record the make command line or at least the target
  25. name ($@).  Difficult because of nested targets and quoting rules...
  26.  
  27. Add PRESERVE <list of global variable names or macro names>.
  28. Used in TAKE files or macros.  The preserved items are automatically
  29. restored by popclvl().
  30.  
  31. Add SAVE command to save things:
  32.   ROLLBACK-BUFFER, SETTINGS { COMM, TERM, FILE, PROTOCOL, ... }
  33.  
  34. Add a function that fully evaluates a macro definition, unlike \m() or
  35. \fdefinition(), which only return the literal definition, unevaluated.
  36.  
  37. SET DEBUG blah -- to select debugging of different kinds of things and/or
  38. different levels of verbosity.
  39.  
  40. Give warning message when WHATAMI changes file or naming mode?
  41.  
  42. Add a post-transfer-check feature to the protocol, involving file checksum/CRC
  43. and/or size?
  44.  
  45. Add \Kmouse to toggle mouse on/off.
  46.  
  47. SET SPEED help message is very misleading if not in local mode.
  48. Just error out right away.
  49.  
  50.  . If a packet transmission fails, we have to retransmit it.  But that is
  51.    likely to fail for the same reason (too long, too fast).  We can't chop
  52.    into subpackets for well-known reasons, but we can insert delays when
  53.    retransmitting...
  54.  
  55.  . ASSIGN/DEFINE \%a { foo } does not strip the braces!  Oops.
  56.  
  57.  . Make IF EXIST also work for wildcards ?
  58.  
  59.  . Add REPLAY command to OS/2 C-K.
  60.  . Then add slide-show capability (e.g. via <OS>PAUSE<ST>).
  61.  
  62.  . When receiving, if transfer fails, give message about partial file kept.
  63.  
  64.  . No way to have a literal comma in a \Function() argument -- no kind of
  65.    quoting works.
  66.  
  67.  . Make hitting CR during file transfer work; make retries get updated
  68.    on f.t. screen.
  69.  
  70.  . Allow \Kverbs in OUTPUT commands ???
  71.  
  72.  . Pop back to command mode immediately if carrier drops during file transfer:
  73.    . At beginning of transfer, if serial, check if carrier on, set flag.
  74.    . Upon read timeout, if flag on & carrier off, then ttclos().
  75.    . Add commands to select/control this behavior, e.g. SET SERVER blah blah..
  76.  
  77.  . Need SET TERM HEBREW KEYBOARD-MODE { ENABLED, DISABLED }
  78.    If there is a real Hebrew keyboard, we don't need to use abc's.
  79.  . Let user provide own keymap:
  80.    SET TERM HEBREW KEYMAP { BUILTIN, FILE <filename> } (format of file?)
  81.  
  82.  . Adapt SHOW VAR/KVERB keyword-arranging code to command parser.
  83.  . User-definable DIAL HANGUP string (hard).
  84.  
  85.  . SET CLOCK ... to display elapsed time of each CONNECT session or somesuch.
  86.  
  87.  . Add ISO 2022 charset invocation & designation to OS/2 C-K.
  88.  . Add host directed keyboard-mode switching to OS/2 C-K (CSI ? 35 h/l).
  89.  . Add VT320 reports to OS/2 C-K.
  90.  . Add SET TERMINAL CONTROLS { 7, 8 } to OS/2 C-K.
  91.  . Add SET TERMINAL TABSTOPS for OS/2 C-K, and have SHOW TERMINAL display them.
  92.  . Enable DEC UDK's in OS/2 C-K.
  93.  . Enable local echoing of escape sequences in OS/2 C-K.
  94.  . Allow host access to bottom line in OS/2 C-Kermit, e.g. sysline.
  95.  . Integrate DEC Technical charset with other charsets, handle in same way.
  96.  
  97.  . SET SERVER TIMEOUT <blah>, to exit server mode automatically after
  98.    blah amount of time.
  99.  . Add an option to pop out of server mode automatically if the connection
  100.    closes (e.g. carrier drops).
  101.  
  102.  . Make SET CARRIER ON (and AUTO?) apply to packet mode too.
  103.  
  104.  . Add SHOW ARRAY <name-of-particular-array> to dump contents of
  105.    whole array.  Or somesuch...
  106.  
  107.  . Use knowledge of controlling-terminal rows & cols when formatting
  108.    file transfer display screen, keyword and file menus, etc.
  109.  
  110.  . When reading TAKE files, keep track of the line number.
  111.    Make error reports show filename and line number.
  112.    Maybe allow an optional label in the TAKE command, telling Kermit
  113.    to GOTO the label in the file before starting to execute commands.
  114.  
  115. (Forget the following -- On connection loss, ttol() and friends should
  116. just call ttclos() and return failure; see above).
  117.  
  118.  . When ttol() fails, it does not stop the protocol immediately.
  119.    Instead, we have a lengthy series of timeouts and retransmissions
  120.    until the retry limit is reached.  Solution:
  121.    1. Change ttol() to return -3 on fatal error, -1 on possibly
  122.       correctable errors.  Fatal errors include connection loss,
  123.       configuration problems.
  124.    2. Change spack() to pass back -3 return code.
  125.    3. Change sdata() and all other packet-sending routines to
  126.       pass back spack's return code.
  127.    4. Change ckcpro.w to send error packet and terminate the transfer
  128.       if it ever gets a -3 return code from any of these routines.
  129.  
  130.  . Similarly for ttinl(), ttinc(), ttoc(), and friends.
  131.  
  132.  . Add Hebrew-7 to CONNECT-mode esc seq recognizer...
  133.  
  134.  . Add SET ALARM / IF ALARM for compatibility with MS-DOS Kermit.
  135.  
  136.  . Add SET COMMAND (or maybe CONSOLE) SPEED, which lets user tell C-Kermit
  137.    what the console speed is, e.g. when the operating system lies about it.
  138.  
  139.  . Always receive into a temporary file, for which a unique and
  140.    nondestructive name is computed.  Then, if the transfer fails,
  141.    delete the temp file.  If the transfer succeeds, rename it according
  142.    to the prevailing FILE COLLISION setting.  Advantage: when FILE
  143.    COLLISION is OVERWRITE, this prevents a failed transfer from destroying
  144.    the original file.  Disadvantage: disk filling up, difficulty of modifying
  145.    all C-Kermit versions to manage temp files.
  146.  
  147.  . SELECT { NEWER, OLDER, ... } <date-time>
  148.           { LONGER, SHORTER, ...} <size>
  149.           etc...
  150.    Selection criteria for files to send.  After building up a list of
  151.    criteria (should they be ANDed or OR'd ?), the SEND <filespec> or MSEND ...
  152.    command will send the files that match the filespec(s) AND meet the 
  153.    criteria.
  154.  
  155.  . Make SET TERM CR-DISPLAY also apply to INPUT echoing (oops, not as easy
  156.    as it looks with new input-echo-buffering).
  157.  . Add REMOTE MESSAGE.
  158.  . Add REMOTE RENAME.
  159.  
  160.  . Add a command to let CR be sent totally bare on a TELNET connection,
  161.    instead of as CR-NUL or CR-LF.  Maybe institute TELNET BINARY mode for this.
  162.  
  163.  . Add a command to turn off dynamic packet length, and/or to set limits.
  164.  
  165.  . Add transfer mode (text/binary) to STATISTICS display (not easy because
  166.    it might have been a local mode rather than global, or might have changed
  167.    from file to file).
  168.  
  169.  . Clean up and incorporate Fulvio Marino's I/O buffering code,
  170.     and eventually remove the old I/O code.  First for UNIX, then elsewhere.
  171.  . Convert Sys V / POSIX versions to not need ^\ before local-mode file
  172.     transfer interruption commands (do nonblocking reads of console) (now
  173.     possible because of Fulvio's code?) (or just enable CK_POLL everywhere
  174.     that poll() is available).
  175.  
  176.  . Let Kermit run as a TCP/IP server, instead of FTP, listening on its own
  177.     socket, so it doesn't have to use Telnet and ptys - this will make it
  178.     go MUCH FASTER over TCP/IP connections.  Get TCP socket number officially
  179.     assigned.
  180.  . Allow various kinds of network server operation.  By default (in UNIX at
  181.     least), Kermit chroot's to /pub/ftp, user anonymous.  Or maybe also an
  182.     option for no chroot, to allow anonymous access to entire file system,
  183.     based on permissions of individual files and directories (as on most
  184.     non-UNIX systems).  Like ftp server, client can also log in as a specific
  185.     user.
  186.  . Also allow UNIX (and other?) Kermit servers to run as user's login shell.
  187.  . Add LOGIN / LOGOUT support in server (it's already in the client);
  188.     in the client, accept LOGIN and LOGOUT as synonyms for REMOTE LOGIN and
  189.     REMOTE LOGOUT.
  190.  . Add a more convenient style of client/server operation, in which SET
  191.     commands given at the client take effect on both the client and the server
  192.     (like the BINARY command, when given to an FTP client).
  193.  . Add an FTP client.
  194.  
  195.  . Do something about +++ appearing in non-data portions of Kermit packets.
  196.     (No, can't be done without fundamentally changing the protocol.)
  197.  . Add SET MODEM USER-DEFINED.  Just make a blank mdminf structure & pointers
  198.     for it, and then give users SET commands to fill it in.
  199.  . Add SET DIAL COMPRESSION and SET DIAL ERROR-CORRECTION for generic
  200.     enabling/disabling/selection of these items.  Get rid of SET DIAL MNP,
  201.     and incorporate it into the new commands.  These commands should allow
  202.     specification of various methods AND fallback schemes.  (Or not...)
  203.  . Add support for more types of modems: Practical Peripherals, Multitech, etc.
  204.  . Add optional system-wide dialing log, for billing dialout modem users.
  205.  . Need a better mechanism for handling speed-matching modems - recognition of
  206.     interface speed AND connect speed, setting of timeouts, etc, accordingly.
  207.  . Add a command-line option for phone number to dial.
  208.  . Fix DF2xx modem support for bidirectional orientation in Ultrix 3.1 & later.
  209.  
  210.  . ttinl() is getting its fingers too much into the protocol.  I'd like to
  211.     remove it altogether and just let rpack() do all that stuff, calling
  212.     ttinc() to simply read characters from the communication line, and let
  213.     ttinc() handle all the buffering.  Better yet, let's turn ttinc() into a
  214.     macro that calls some kind of ttfillbuf() routine whenever it needs to.
  215.     This would remove several layers of function calls from the packet i/o,
  216.     and it would let us handle TELNET options during file transfer, etc etc.
  217.     Fulvio's code could come in handy here.
  218.  . Call parchk() only at beginning of transaction, not for each packet.
  219.  . Handshake is done wrong in ttinl().  ttinl() should ALWAYS be length-driven.
  220.     Handshake should be looked for AFTER the packet has been read based on its
  221.     length.  Otherwise we can't use the printable-handshake for DDK.  Once this
  222.     is fixed, allow SET HANDSHAKE CODE accept any number 0..255.
  223.  . Change ck?fio.c to return the text-file byte stream with CRLF delimiters,
  224.     rather than making the system-independent function getpkt() do it.
  225.     Better, yet make the file reading modules return some kind of end-of-record
  226.     indication for both text and (where applicable, as in VMS) binary files.
  227.  . When uploading text files to UNIX, *all* CRs are stripped.  The way it
  228.     SHOULD work is: bare CRs are kept, bare LFs are kept, and only CRLFs are
  229.     treated as line terminators.  This will take a major reworking of decode()
  230.     in ckcfns.c.  It's not obvious how to do this in a clean way, because the
  231.     CRLF might be broken between packets.
  232.  
  233.  . Add code for breaking outbound attribute string up into more than one
  234.     attribute packet.
  235.  . Make A-packets fit in negotiated packet length.
  236.  . Add file protections/permissions to attribute packet processing.
  237.  . Support for "End of attributes" attribute = Attribute "@" (K-370 has it).
  238.  . Add mechanisms for sending and receiving directory trees in a system-
  239.     independent manner.  New protocol must be involved for telling the
  240.     remote Kermit to switch to (and if necessary, create) a new directory.
  241.     Could be something as simple as a new "set file names" option.
  242.     Maybe add code for recognizing and converting VMS, MS-DOS, etc, directory
  243.     names based on system-type field from Attribute packet.  Or preferably,
  244.     devise standard syntax for file specifications (device, path, etc, maybe
  245.     an X.400-style notation).
  246.  
  247.  . Dynamic adjustments of timeouts based on transfer rate, system load, etc.
  248.  . Calculate delay between S and its ACK & use it (e.g. for SLIP connections)
  249.  
  250.  . Design protocol for file transfer checkpointing and add it to the program.
  251.    Must work for both text and binary files, and be independent of operating
  252.    system, file format, etc.
  253.  
  254.  . Ditto for higher levels of compression.
  255.  
  256.  . Separation of TERMINAL and COMMAND flow control
  257.  . Add RTS/CTS support for more systems.
  258.  . SET COMMAND SHIFT-IN/OUT { OFF, ON } ??? (maybe not necessary)
  259.  
  260.  . Handle TELNET negotiations at all times, even during file transfer...
  261.  . When sending a file whose name contains international characters, translate
  262.     the name to ASCII because we haven't negotiated a transfer character-set
  263.     yet.
  264.  . Add a SHOW command for each SET command?
  265.  . Add a way to redirect output of REMOTE commands to a file.
  266.  . Add \v(wordsize) == sizeof(int).
  267.  . Quoted comma ("\,") in macro definition should not cause break to new cmd.
  268.     (or maybe it should -- meaning of "\" would depend on level of nesting)
  269.  . Find out what the system's interrupt character is, and refer to it in
  270.     messages, rather than always saying "Ctrl-C", ditto for suspend character.
  271.  . Let user SET the command-editing characters:
  272.     SET COMMAND { CHARACTER-DELETE, WORD-DELETE, LINE-DELETE, REDISPLAY } ...
  273.  . REMOTE SET FILE CHARACTER-SET <string>.  Needed for anonymous Kermit server.
  274.  . Add Japanese & Chinese ISO 646 (same) as FCS's.
  275.  . Allow multiple actions on command line, e.g. -s, -g, -f...
  276.  . Add IF INPATH <filename> <command>.
  277.  . Add CDPATH handling to CD command (UNIX).
  278.  . System-wide transaction log -- logs all file transfers by all users
  279.     in a common long, showing username, filespec, timestamp, mode, etc
  280.     (forget it -- locking & contention problems).
  281.  
  282.  . Make log files use the file backup mechanism.
  283.  . Change zltor() to strip .~nn~ rather than converting it.
  284.  . Add a command like VMS PURGE for Kermit backup files.
  285.  . Add a command to select alternate forms for Kermit backup file names.
  286.  
  287.  . Make ckufio.c zstime() more flexible (steal code from ck9fio.c).
  288.  . Define a signal people can use to kill Kermit, that it can catch,
  289.     call doexit(), send error packet, whatever....
  290.  . Multiple sessions (network, serial port, etc).
  291.     Session info structure, session manager.
  292.  . INPUT -1 (or 0?) <string> (or something like that) to wait forever.
  293.  . Make SET / SHOW KEY read extended keys on NeXT, SPARCstation, Mac...
  294.  . SET TRANSLATE command as in MS-DOS Kermit for user-defined character
  295.      translation during CONNECT.
  296.  . addhlp() should break stuff up into separate lines if too long.
  297.  . Add hh:mm:ss argument for PAUSE and WAIT, as in MS-DOS Kermit.
  298.  . Add \ftranslate(string,cs1,cs2) for translating character set?
  299.  . Allow more than 9 macro arguments.  Put args in a special array, or SHIFT.
  300.  . Add hook for UNIX file input and output filters, maybe SET { SEND, RECEIVE }
  301.     FILTER <command>.  Use with compress, tar, tr, crypt, etc.
  302.  . Add IF READABLE (like IF EXIST).
  303.  . Redo input() function to be a state-table switcher?
  304.  . Add cmchar() to parse a character (control or otherwise).
  305.  . Learned scripts - LOG SCRIPT <filename>, CLOSE SCRIPT, record CONNECT
  306.     session as a series of INPUT, PAUSE, OUTPUT, etc, commands.
  307.     But what about passwords?
  308.  . Add ON { ERROR, HANGUP, INTERRUPTION, EOF, ... }
  309.  . SET RECEIVE MAIL-COMMAND <template>, with substitutable parameters.
  310.     Receiver parses {file} and {options} in template, substitutes actual
  311.     filename and options received from client program's MAIL command.
  312.  . Similar idea for SET RECEIVE PRINT-COMMAND.
  313.  . Make UNIX version use pipes for incoming mail and print files.
  314.  . Add more SET FILE NAMES options, like literal but with pathname stripped.
  315.     Allow user to specify a template for fields, capitalization, punctuation.
  316.     Like SET FILE NAME TEMPLATE [[node] sep] [[dev] sep] [[dir] sep] ...
  317.     Or maybe somthing simpler like SET FILE NAMES [UN]CONVERTED [UN]STRIPPED.
  318.  . Add supporting code to SET HOST for SET NETWORK DECNET (VMS, Ultrix).
  319.  . Add supporting code for SET HOST X.25 for VAX PSI and other X.25 products.
  320.  . Add supporting code for SET HOST via ISO/OSI in BSD Networking/2.
  321.  . Find a way in UNIX to check available disk space and refuse incoming files
  322.     that are too big.  Tricky, maybe impossible, for many kinds of UNIX.
  323.  . Internationalize:
  324.      . Segregate all message strings into a separate module, to allow
  325.        translation into other languages - a "resource file"?  Use xstr.
  326.        Complicated because many different character sets can be used
  327.        for each language.
  328.      . Make string comparisons and "tolower"/"toupper" work with int'l
  329.        character sets (inlcuding in INPUT/REINPUT).
  330.      . Fix \v(date) to report date in different languages, formats.
  331.      . Fix \v(day), \v(nday) to handle non-English day names.
  332.      . Fix \v(ndate) to handle non-English month names.
  333.      . GETOK command answers: Yes, Ja, Si, ...
  334.      . etc etc.
  335.  . Implement server end of REMOTE KERMIT.  Means redirecting all Kermit's
  336.     screen output to the packet builder -- no more printf, puts, putc.
  337.     (Really not worth it!)  (Or maybe use temp files?  Yuk.)
  338.  . Reorganize the whole program to define and isolate system depencies better,
  339.     perhaps writing a "sysgen" procedure (like Larry Wall's Configure program).
  340.  . Eliminate global variables (ha ha).
  341.  . Terminal emulation for UNIX workstations: key definition, screen rollback,
  342.     printer control, etc.  This has already been done for Macintosh and OS/2.
  343.     Requires separate ck?con.c for each kind of workstation.  Even then, there
  344.     is often no way to get at real keyboard and screen.
  345.  . IBM 3270 terminal emulation: tn3270, perhaps others.
  346.  . Add support for Kerberos authentication (see 4.4BSD telnet).
  347.  . Write an alternate ckucmd.c that produces screen menus rather than
  348.     interactive commands, given the same command calls (cmkey, cmtxt, cmnum,
  349.     cmcfm, etc).  For UNIX ttys, use the curses library.  For NeXT, Macintosh,
  350.     Amiga, OS/2 PM, SPARCstations, etc, make real pop-up menus, allow mouse
  351.     input, etc. 
  352.  . An X-Windows server/client interface?  SunView?  Motif?  NextStep?  etc?
  353.  . Before even thinking about the two items above, design a standard for what
  354.     the interface should look like. 
  355.  
  356. How to do user-defined translations:
  357.  SET FILE CHARACTER-SET USER-DEFINED
  358.  SET XFER CHARACTER-SET <valid-xfer-charset>
  359.  SET USER-TRANSLATION FROM <tcs> xxx yyy ; for incoming files
  360.  SET USER-TRANSLATION TO   <tcs> yyy xxx ; for outbound files
  361.  Applies to <tcs> + USER-DEFINED FCS.
  362.  Can have one pair for each TCS.
  363.  Now announcements work right, etc etc.
  364.  DUMP USER-TRANSLATION <tcs>  [ <file> ]  ; list tables (to file)
  365. For C-Kermit, we have 4 TCS's, so 8 x 2 x 256 = 2K bytes, not bad:
  366.  . Add FC_USER FCS
  367.  . Add 6 tables (not supported for Kanji)
  368.  . Initialize each table to identity function
  369.  . Add 8 functions (even for TRANSPARENT, but NULL for Kanji)
  370.  . Figure out a way of telling user whether table has been defined.
  371.  . Add SHOW USER-TRANSLATION <tcs> [ <file> ]
  372.    (= a bunch of SET USER-TRANSL commands, with comments)
  373.  . Add DUMP USER-TRANSLATION <tcs> [ <file> ]
  374.    (= just the numbers, comma-separated? space-separated? one per line?)
  375.  . Add LOAD USER-TRANSLATION <tcs> <file>
  376.    (= read table written by DUMP, watch out for value and table-size overflow) 
  377.  . Add some kind of built-in test pattern?
  378.  
  379. ----------
  380. FROM USERS
  381.  
  382. From: Mark Whitis <whitis@hopper.itc.virginia.edu>
  383. Subject: Re: Modem Sharing Over TCP/IP
  384. To: Frank da Cruz <fdc@watsun.cc.columbia.edu>
  385. Date: Wed, 28 Sep 1994 22:04:02 -0400 (EDT)
  386.  
  387. > > Great.  I take it this is a newer version than I currently have.
  388. > > Does C-Kermit yet support kermit over an arbitrary unix program via
  389. > > pipes (popen)?   This would let you run kermit over telnet, rlogin, tip,
  390. > > rsh, etc.
  391. > >
  392. > I'm not sure what you want here.  It already lets you make telnet
  393. > connections. 
  394. > The new REDIRECT command lets you run any other program under Kermit,
  395. > redirecting its stdio to the communication channel, which can be serial
  396. > or TCP/IP.
  397.  
  398. That is a neat feature, which allows people to do things like run
  399. zmodem on top of kermit.
  400.  
  401. What I had in mind was a similar feature for the bottom end.
  402.  
  403. Consider the following scenarios:
  404.   - I am using a poorly managed unix system at someone elses facility.
  405.     They do not have kermit installed.  Tip is installed and /dev/cua0
  406.     is accessable only via setgid uucp programs such as tip.  I don't
  407.     have root.  So, I copy kermit to ~/bin and issue the following 
  408.     hypothetical commands:
  409.        $ kermit
  410.        C-kermit> set line pipe
  411.        C-kermit> set pipecmd "tip 555-1212"
  412.        C-kermit> c
  413.        tip: dialing 555-1212
  414.        Connected
  415.        login: foo
  416.        password:
  417.        $ kermit -ix
  418.        C-Kermit server starting.  Return to your local...
  419.        ^]c
  420.        C-Kermit> get foo.bar
  421.  
  422.   - I wish to talk to a network dumb system connected to a DEC LAT terminal 
  423.     server and emulate a terminal and transfer files using kermit.  I have
  424.     suns decnet software (the command "dnilogin" is equivalent to the
  425.     VMS "set host" command):
  426.        C-kermit> set line pipe
  427.        C-kermit> set pipecmd "dnilogin dumbhost"
  428.        C-kermit> c
  429.        dumbhost login: foo
  430.        etc.
  431.  - I have (hypothetically) a modem pool which is set up to only
  432.    accept connections on a protected port from a trusted host.  On
  433.    the trusted host, there is a program "outdial" which runs
  434.    setuid root to access the protected port but is executable
  435.    only by members of the unix group "outdial".  Or, perhaps
  436.    it lets anybody run the program but only members of the group
  437.    "lddial" are allowed to dial a non-local number.  The program
  438.    makes the connection to the modem, issues the dialing string,
  439.    and disables the escape sequence on the hayes modem.
  440.        C-kermit> set line pipe
  441.        C-kermit> set pipecmd "outdial 555-1212"
  442.        C-kermit> c
  443.        outdial: connecting to modem pool
  444.        outdial: initializing modem
  445.        outdial: dialing...555-1212
  446.        outdial: connected.
  447.  
  448.   - Paranoid user wants crypto protection.  They have a program called
  449.     scramble which runs another program in a subprocess and
  450.     scrambles stdin is connected to the programs stdin and scrambles
  451.     stdout is connected to the other programs stdout but stdin and
  452.     stdout are encrypted on the way.  There is some mechanism,
  453.     perhaps, to turn encryption on and off so you can handle logins
  454.     (although that may be one of the things you want to scramble).
  455.     
  456.        C-kermit> set line pipe
  457.        C-kermit> set pipecmd "scramble -waittrigger telnet secret.spook.gov"
  458.                             or
  459.                  set pipecmd "scramble -waittrigger tip 555-1212"
  460.        C-kermit> c
  461.        login: flag
  462.        password:
  463.        $ scramble -sendtrigger bash
  464.        %$#Enable-Scramble#$%    (triggers master to switch into scramble mode).
  465.        bash$
  466.  
  467.        (similarly, you could create a script "scramblebash" which
  468.        just has "scramble -immediate bash" and then put scramblebash
  469.        as your login shell; that way, your password would be scrambled
  470.        too.).
  471.  
  472. This is a more general solution to the problem the TCP code was added
  473. to C-Kermit to solve.
  474.  
  475. Yes, some of the above scenarios arise because of people doing things
  476. the Wrong Way(TM) but in the real world you have to deal with this and
  477. part of the beauty of kermit as compared to other protocols is that
  478. it can be configured to work under adverse conditions.  You could deal
  479. with most of the above situations in a kludgy fashion
  480. by using the new TCP features of kermit:
  481.     C-kermit> set line tcp/ip
  482.     C-kermit> set tcp host localhost
  483.     C-kermit> c
  484.     login: foo
  485.     Password:
  486.     $ scramble telnet secret.spook.org
  487.     $ outdial 555-1212
  488.     $ tip 555-1212
  489.     $ dnilogin dumbost
  490. However, this requires the user to login again, adds additional
  491. intervening layers to screw things up, and creates additional
  492. unix processes (telnet, login, shell), uses up pttys, etc.
  493.  
  494. If anything, implementing this new feature is easier to do than the
  495. redirect command.  You create two pipes using the pipe(3).  You fork.
  496. You replace your stdin and stdout in the child process with one end of
  497. each pipe and redirect stderr to stdout.  Then you issue a system call
  498. using the string supplied by the user.  Back in the parent, you make
  499. two (FILE *) for the pipe using fdopen (assuming you use the higher
  500. level stdio calls) in C-kermit.  One file descriptor is used for
  501. reads, the other for writes. Naturally it helps if you use two
  502. separate descriptors throughout the kermit code to access the ioport.
  503. To open a regular com port or TCP connection, you just point both to
  504. the same stream in your open or close.
  505.  
  506. This is something I have thought of adding and submitting as a patch
  507. but have not got arround to it yet.
  508.  
  509. -------------------
  510. (End of CKCKER.2DO)
  511.