ckubwr.txt
上传用户:dufan58
上传日期:2007-01-05
资源大小:3407k
文件大小:165k
源码类别:

通讯/手机编程

开发平台:

Windows_Unix

  1.     SCO supplements are at ftp://ftp.sco.com/; the "rs40" series are
  2.     under directory /Supplements/internet
  3. (end quote)
  4. Reportedly, if you have a script that makes a TCP/IP SET HOST (e.g. Telnet)
  5. connection to SCO 3.2v4.2 with TCP/IP 1.2.1, and then does the following:
  6.   script $ exit
  7.   hangup
  8. this causes a pseudoterminal (pty) to be consumed on the SCO system; if you do
  9. it enough times, it will run out of ptys.  An "exit" command is being sent to
  10. the SCO shell, and a HANGUP command is executed locally, so the chances are
  11. good that both sides are trying to close the connection at once, perhaps
  12. inducing a race condition in which the remote pty is not released.  It was
  13. speculated that this would be fixed by applying SLS net382e, but it did not.
  14. Meanwhile, the workaround is to insert a "pause" between the SCRIPT and HANGUP
  15. commands.  (The situation with later SCO releases is not known.)
  16. SCO UNIX and OpenServer allow their console and/or terminal drivers to be
  17. configured to translate character sets for you.  DON'T DO THIS WHEN USING
  18. KERMIT!  First of all, you don't need it -- Kermit itself already does this
  19. for you.  And second, it will (a) probably ruin the formatting of your screens
  20. (depending on which emulation you are using); and (b) interfere with all sorts
  21. of other things -- legibility of non-ASCII text on the terminal screen, file
  22. transfer, etc.  Use:
  23.   mapchan -n
  24. to turn off this feature.
  25. Note that there is a multitude of SCO entries in the makefile, many of them
  26. exhibiting an unusually large number of compiler options.  Some people
  27. actually understand all of this.  Reportedly, things are settling down with
  28. SCO OpenServer 5.x and Unixware 7 -- the SCO UDK compiler is said to generate
  29. binaries that will run on either platform, by default, automatically.  When
  30. using gcc or egcs, on the other hand, differences persist, plus issues
  31. regarding the type of binary that is generated (COFF, ELF, etc), and where
  32. and how it can run.  All of this could stand further clarification by SCO
  33. experts.
  34. (3.7) C-KERMIT AND SOLARIS
  35. See also:
  36.   The comp.unix.solaris newsgroup
  37.   http://access1.sun.com/
  38.   http://docs.sun.com/
  39.   http://www.sunhelp.com/
  40.   http://www.wins.uva.nl/pub/solaris/solaris2/
  41.   http://www.wins.uva.nl/cgi-bin/sfaq.cgi
  42.   ftp://ftp.wins.uva.nl/pub/solaris
  43. And about serial communications in particular, see "Celeste's Tutorial on
  44. Solaris 2.x Modems and Terminals":
  45.   http://www.stokely.com/
  46. In particular:
  47.   http://www.stokely.com/unix.sysadm.resources/faqs.sun.html
  48. For PC-based Solaris, also see general comments on PC-based UNIXes in
  49. Section 3.0.  Don't expect Solaris or any other kind of UNIX to work right
  50. on a PC until you resolve all interrupt conflicts.  Don't expect to be able
  51. to use COM3 or COM4 (or even COM2) until you have configured their addresses
  52. and interrupts.
  53. Even then your serial port can't be used -- or at least won't work right --
  54. until it is enabled in Solaris.  For example, you get a message like "SERIAL:
  55. Operation would block" when attempting to dial.  This probably indicates that
  56. the serial port has not been enabled for use with modems.  You'll need to
  57. follow the instructions in your system setup or management manual, such as
  58. (e.g.) the Desktop SPARC Sun System & Network Manager's Guide, which should
  59. contain a section "Setting up Modem Software"; read it and follow the
  60. instructions.  These might (or might not) include running a program called
  61. "eeprom", editing some system configuration file (such as, for example:
  62.   /platform/i86pc/kernel/drv/asy.conf
  63. and then doing a configuration reboot, or running some other programs like
  64. drvconfig and devlinks.  "man eeprom" for details.
  65. Also, on certain Sun models like IPC, the serial port hardware might need to
  66. have a jumper changed to make it an RS-232 port rather than RS-423.
  67. Some users report difficulties dialing out with C-Kermit on serial port when
  68. using the /dev/cua/a name -- session seems to become stuck, can't escape back,
  69. etc -- but when using the /dev/term/a name for the *same* device, everything
  70. works fine.  Explanation: unknown, but probably due to improper configuration
  71. of the port; again, see the materials referenced above.
  72. Reportedly, if you start C-Kermit and "set line" to a port that has a modem
  73. connected to it that is not turned on, and then "set flow rts/cts", there
  74. might be some (unspecified) difficulties closing the device (Solaris version
  75. not specified).
  76. The built-in SunLink X.25 support for Solaris 2.3/2.4./25 and SunLink 8.01 or
  77. 9.00 works OK provided the X.25 system has been installed and initialized
  78. properly.  Packet sizes might need to be reduced to 256, maybe even less,
  79. depending on the configuration of the X.25 installation.  On one connection
  80. where C-Kermit 6.0 was tested, very large packets and window sizes could be
  81. used in one direction, but only very small ones would work in the other.
  82. In any case, according to Sun, C-Kermit's X.25 support is superfluous with
  83. SunLink 8.x / Solaris 2.3.  Quoting an anonymous Sun engineer:
  84.   ... there is now no need to include any X.25 code within kermit.  As of
  85.   X.25 8.0.1 we support the use of kermit, uucp and similar protocols over
  86.   devices of type /dev/xty.  This facility was there in 8.0, and should
  87.   also work on the 8.0 release if patch 101524 is applied, but I'm not 100%
  88.   sure it will work in all cases, which is why we only claim support from
  89.   8.0.1 onwards.
  90.   When configuring X.25, on the "Advanced Configuration->Parameters" screen
  91.   of the x25tool you can select a number of XTY devices.  If you set this
  92.   to be > 1, press Apply, and reboot, you will get a number of /dev/xty
  93.   entries created.
  94.   Ignore /dev/xty0, it is a special case.  All the others can be used exactly
  95.   as if they were a serial line (e.g. /dev/tty) connected to a modem, except
  96.   that instead of using Hayes-style commands, you use PAD commands.
  97.   From kermit you can do a 'set line' command to, say, /dev/xty1, then set
  98.   your dialing command to be "CALL 12345678", etc.  All the usual PAD
  99.   commands will work (SET, PAR, etc).
  100.   I know of one customer in Australia who is successfully using this, with
  101.   kermit scripts, to manage some X.25-connected switches. He used standard
  102.   kermit, compiled for Solaris 2, with X.25 8.0 xty devices.
  103. C-Kermit can't be compiled successfully under Solaris 2.3 using SUNWspro cc
  104. 2.0.1 unless at least some of the following patches are applied to cc (it is
  105. not known which one(s), if any, fix the problem):
  106.   100935-01 SparcCompiler C 2.0.1: bad code generated when addresses
  107.     of two double arguments are involved
  108.   100961-05 SPARCcompilers C 2.0.1: conditional expression with
  109.     function returning structure gives wrong value
  110.   100974-01 SparcWorks 2.0.1: dbx jumbo patch
  111.   101424-01 SPARCworks 2.0.1 maketool SEGV's instantly on Solaris 2.3
  112. With unpatched cc 2.0.1, the symptom is that certain modules generate
  113. truncated object files, resulting in many unresolved references at link time.
  114. Using a Sun workstation keyboard for VT emulation when accessing VMS:
  115. From: Jerry Leichter <leichter@smarts.com>
  116. Newsgroups: comp.os.vms
  117. Subject: Re: VT100 keyboard mapping to Sun X server
  118. Date: Mon, 19 Aug 1996 12:44:21 -0400
  119. > I am stuck right now using a Sun keyboard (type 5) on systems running SunOS
  120. > and Solaris.  I would like to use EVE on an OpenVMS box with display back to
  121. > the Sun.  Does anyone know of a keyboard mapping (or some other procedure)
  122. > which will allow the Sun keyboard to approximate a VT100/VT220?
  123. You can't get it exactly - because the keypad has one fewer key - but
  124. you can come pretty close.  Here's a set of keydefs I use:
  125. keycode 101=KP_0
  126. keycode 119=KP_1
  127. keycode 120=KP_2
  128. keycode 121=KP_3
  129. keycode 98=KP_4
  130. keycode 99=KP_5
  131. keycode 100=KP_6
  132. keycode 75=KP_7
  133. keycode 76=KP_8
  134. keycode 77=KP_9
  135. keycode 52=KP_F1
  136. keycode 53=KP_F2
  137. keycode 54=KP_F3
  138. keycode 57=KP_Decimal
  139. keycode 28=Left
  140. keycode 29=Right
  141. keycode 30=KP_Separator
  142. keycode 105=KP_F4
  143. keycode 78=KP_Subtract
  144. keycode 8=Left
  145. keycode 10=Right
  146. keycode 32=Up
  147. keycode 33=Down
  148. keycode 97=KP_Enter
  149. Put this in a file - I use "keydefs" in my home directory and feed it
  150. into xmodmap:
  151.   xmodmap - <$HOME/keydefs
  152. This takes care of the arrow keys and the "calculator" key cluster.  The
  153. "+" key will play the role of the DEC "," key. The Sun "-" key will be
  154. like the DEC "-" key, though it's in a physically different position -
  155. where the DEC PF4 key is.  The PF4 key is ... damn, I'm not sure where
  156. "key 105" is.  I *think* it may be on the leftmost key of the group of
  157. four just above the "calculator" key cluster.
  158. I also execute the following (this is all in my xinitrc file):
  159. xmodmap -e 'keysym KP_Decimal = KP_Decimal'
  160. xmodmap -e 'keysym BackSpace = Delete BackSpace' 
  161.         -e 'keysym Delete = BackSpace Delete'
  162. xmodmap -e 'keysym KP_Decimal = Delete Delete KP_Decimal'
  163. xmodmap -e 'add mod1 = Meta_R'
  164. xmodmap -e 'add mod1 = Meta_L'
  165. Beware of one thing about xmodmap:  Keymap changes are applied to the
  166. *whole workstation*, not just to individual windows.  There is, in fact,
  167. no way I know of to apply them to individual windows.  These definitions
  168. *may* confuse some Unix programs (and/or some Unix users).
  169. If you're using Motif, you may also need to apply bindings at the Motif
  170. level.  If just using xmodmap doesn't work, I can try and dig that stuff
  171. up for you.
  172. (end quote)
  173.   NOTE: The rest of the problems in this section have to do with bidirectional
  174.   tty lines and the Solaris Port Monitor.  Hopefully these were all fixed in
  175.   C-Kermit 6.0.
  176. Reportedly, "C-Kermit ... causes a SPARCstation running Solaris 2.3
  177. to panic after the modem connects.  I have tried compiling C-Kermit with Sun's
  178. unbundled C compiler, with GCC Versions 2.4.5 and 2.5.3, with make targets
  179. 'sunos51', 'sunos51tcp', 'sunos51gcc', and even 'sys5r4', and each time it
  180. compiles and starts up cleanly, but without fail, as soon as I dial the number
  181. and get a 'CONNECT' message from the modem, I get:
  182.   BAD TRAP
  183.   kermit: Data fault
  184.   kernel read fault at addr=0x45c, pme=0x0
  185.   Sync Error Reg 80 <INVALID>
  186.   ...
  187.   panic: Data Fault.
  188.   ...
  189.   Rebooting...
  190. The same modem works fine for UUCP/tip calling."  Also (reportedly), this only
  191. happens if the dialout port is configured as in/out via admintool.  If it is
  192. configured as out-only, no problem.  This is the same dialing code that works
  193. on hundreds of other System-V based UNIX OS's.  Since it should be impossible
  194. for a user program to crash the operating system, this problem must be chalked
  195. up to a Solaris bug.  Even if you SET CARRIER OFF, CONNECT, and dial manually
  196. by typing ATDTnnnnnnn, the system panics as soon as the modem issues its
  197. CONNECT message.  (Clearly, when you are dialing manually, C-Kermit does not
  198. know a thing about the CONNECT message, and so the panic is almost certainly
  199. caused by the transition of the Carrier Detect (CD) line from off to on.)
  200. This problem was reported by many users, all of whom say that C-Kermit worked
  201. fine on Solaris 2.1 and 2.2.  If the speculation about CD is true, then a
  202. possible workaround might be to configure the modem to leave CD on (or off)
  203. all the time.  Perhaps by the time you read this, a patch will have been
  204. issued for Solaris 2.3.
  205. The following is from Karl S. Marsh, Systems & Networks Administrator,
  206. AMBIX Systems Corp, Rochester, NY (begin quote):
  207. "Environment:
  208.   Solaris 2.3 Patch 101318-45
  209.   C-Kermit 5A(189) (and presumably this applies to 188 and 190 also)
  210.   eeprom setting:
  211.     ttya-rts-dtr-off=false
  212.     ttya-ignore-cd=false
  213.     ttya-mode=19200,8,n,8,-
  214. "To use C-Kermit on a bidirectional port in this environment, do not use
  215. admintool to configure the port.  Use admintool to delete any services running
  216. on the port and then quit admintool and issue the following command:
  217.   pmadm -a -p zsmon -s ttyb -i root -fu -v 1 -m "`ttyadm -b -d /dev/term/b 
  218.   -l conttyH -m ldterm,ttcompat -s /usr/bin/login -S n`"
  219. [NOTE: This was copied from a fax, so please check it carefully]  where:
  220.   -a = Add service
  221.   -p = pmtag (zsmon)
  222.   -s = service tag (ttyb)
  223.   -i = id to be associated with service tag (root)
  224.   -fu = create utmp entry
  225.   -v = version of ttyadm
  226.   -m = port monitor-specific portion of the port monitor administrative file
  227.        entry for the service
  228.   -b = set up port for bidirectional use
  229.   -d = full path name of device
  230.   -l = which ttylabel in the /etc/ttydefs file to use
  231.   -m = a list of pushable STREAMS modules
  232.   -s = pathname of service to be invoked when connection request received
  233.   -S = software carrier detect on or off (n = off)
  234. "This is exactly how I was able to get Kermit to work on a bi-directional
  235. port without crashing the system."  (End quote)
  236. On the Solaris problem, also see SunSolve Bug ID 1150457 ("Using C-Kermit, get
  237. Bad Trap on receiving prompt from remote system").  Another user reported "So,
  238. I have communicated with the Sun tech support person that submitted this bug
  239. report [1150457].  Apparently, this bug was fixed under one of the jumbo
  240. kernel patches.  It would seem that the fix did not live on into 101318-45, as
  241. this is EXACTLY the error that I see when I attempt to use kermit on my
  242. system."
  243. Later (Aug 94)...  C-Kermit dialout successfully tested on a Sun4m with a
  244. heavily patched Solaris 2.3.  The patches most likely to have been relevant:
  245. 101318-50: SunOS 5.3: Jumbo patch for kernel (includes libc, lockd)
  246. 101720-01: SunOS 5.3: ttymon - prompt not always visible on a modem connection
  247. 101815-01: SunOS 5.3: Data fault in put() NULL queue passed from
  248.                       ttycommon_qfull()
  249. 101328-01: SunOS 5.3: Automation script to properly setup tty ports prior to
  250.                       PCTS execution
  251. Still later (Nov 94): another user (Bo Kullmar in Sweden) reports that after
  252. using C-Kermit to dial out on a bidirectional port, the port might not answer
  253. subsequent incoming calls, and says "the problem is easy enough to fix with
  254. the Serial Port Manager; I just delete the service and install it again using
  255. the graphical interface, which underneath uses commands like sacadm and
  256. pmadm."  Later Bo reports, "I have found that if I run Kermit with the
  257. following script then it works.  This script is for /dev/cua/a, -s a is the
  258. last a in /dev/cua/a
  259.   #! /bin/sh
  260.   kermit
  261.   sleep 2
  262.   surun pmadm -e -p zsmon -s a
  263. (end quote)
  264. (3.8) C-KERMIT AND SUNOS
  265. For additional information, see "Celeste's Tutorial on SunOS 4.1.3+ Modems
  266. and Terminals":
  267.   http://www.stokely.com/
  268. For FAQs, etc, from Sun, see:
  269.   http://access1.sun.com/
  270. Sun SPARCstation users should read the section "Setting up Modem Software" in
  271. the Desktop SPARC Sun System & Network Manager's Guide.  If you don't set up
  272. your serial ports correctly, Kermit (and other communications software) won't
  273. work right.
  274. Also, on certain Sun models like IPC, the serial port hardware might need to
  275. have a jumper changed to make it an RS-232 port rather than RS-423.
  276. Reportedly, C-Kermit does not work correctly on a Sun SPARCstation in an Open
  277. Windows window with scrolling enabled.  Disable scrolling, or else invoke
  278. Kermit in a terminal emulation window (xterm, crttool, vttool) under SunView
  279. (this might be fixed in later SunOS releases).
  280. On the Sun with Open Windows, an additional symptom has been reported:
  281. outbound SunLink X.25 connections "magically" translate CR typed at the
  282. keyboard into LF before transmission to the remote host.  This doesn't happen
  283. under SunView.
  284. SET CARRIER ON, when used on the SunOS 4.1 version of C-Kermit (compiled in
  285. the BSD universe), causes the program to hang uninterruptibly when SET LINE
  286. is issued for a device that is not asserting carrier.  When Kermit is built
  287. in the Sys V universe on the same computer, there is no problem (it can be
  288. interrupted with Ctrl-C).  This is apparently a limitation of the BSD-style
  289. tty driver.
  290. SunOS 4.1 C-Kermit has been observed to dump core when running a complicated
  291. script program under cron.  The dump invariably occurs in ttoc(), while trying
  292. to output a character to a TCP/IP TELNET connection.  ttoc() contains a
  293. write() call, and when the system or the network is very busy, the write()
  294. call can get stuck for long periods of time.  To break out of deadlocks caused
  295. by stuck write() calls, there is an alarm around the write().  It is possible
  296. that the core dump occurs when this alarm signal is caught.  (This one has
  297. not been observed recently -- possibly fixed in edit 190.)
  298. On Sun computers with SunOS 4.0 or 4.1, SET FLOW RTS/CTS works only if the
  299. carrier signal is present from the communication device at the time when
  300. C-Kermit enters packet mode or CONNECT mode.  If carrier is not sensed (e.g.
  301. when dialing), C-Kermit does not attempt to turn on RTS/CTS flow control.
  302. This is because the SunOS serial device driver does not allow characters to
  303. be output if RTS/CTS is set (CRTSCTS) but carrier (and DSR) are not present.
  304. Workaround (maybe):  SET CARRIER OFF before giving the SET LINE command,
  305. establish the connection, then SET FLOW RTS/CTS
  306. It has also been reported that RTS/CTS flow control under SunOS 4.1 through
  307. 4.1.3 works only on INPUT, not on output, and that there is a patch from Sun
  308. to correct this problem: Patch-ID# T100513-04, 20 July 1993 (this patch might
  309. apply only to SunOS 4.1.3).  It might also be necessary to configure the
  310. eeprom parameters of the serial port; e.g. do the following as root at the
  311. shell prompt:
  312.   eeprom  ttya-ignore-cd=false
  313.   eeprom  ttya-rts-dtr-off=true
  314. There have been reports of file transfer failures on Sun-3 systems when using
  315. long packets and/or large window sizes.  One user says that when this happens,
  316. the console issues many copies of this message:
  317.   chaos vmunix: zs1: ring buffer overflow
  318. This means that SunOS is not scheduling Kermit frequently enough to service
  319. interrupts from the zs serial device (Zilog 8350 SCC serial communication
  320. port) before its input silo overflows.  Workaround: use smaller packets
  321. and/or a smaller window size, or use "nice" to increase Kermit's priority.
  322. Use hardware flow control if available, or remove other active processes
  323. before running Kermit.
  324. SunLink X.25 support in C-Kermit 5A(190) has been built and tested
  325. successfully under SunOS 4.1.3b and SunLink X.25 7.00.
  326. (3.9) C-KERMIT AND ULTRIX
  327. See also: The comp.unix.ultrix and comp.sys.dec newsgroups.
  328. There is no hardware flow control in Ultrix.  That's not a Kermit deficiency,
  329. but an Ultrix one.
  330. When sending files to C-Kermit on a Telnet connection to a remote Ultrix
  331. system, you must SET PREFIXING ALL (or at least prefix more control characters
  332. than are selected by SET PREFIXING CAUTIOUS).
  333. Reportedly, DEC ULTRIX 4.3 is immune to C-Kermit's disabling of SIGQUIT,
  334. which is the signal that is generated when the user types Ctrl-, which kills
  335. the current process (i.e. C-Kermit) and dumps core.  Diagnosis and cure
  336. unknown.  Workaround: before starting C-Kermit -- or for that matter, when you
  337. first log in because this applies to all processes, not just Kermit -- give
  338. the following UNIX command:
  339.   stty quit undef
  340. Certain operations driven by RS-232 modem signal do not work on DECstations or
  341. other DEC platforms whose serial interfaces use MMP connectors (DEC version of
  342. RJ45 telephone jack with offset tab).  These connectors convey only the DSR
  343. and DTR modem signals, but not carrier (CD), RTS, CTS, or RI.  Use SET CARRIER
  344. OFF to enable communication, or "hotwire" DSR to CD.
  345. The maximum serial speed on the DECstation 5000 is normally 19200, but various
  346. tricks are available (outside Kermit) to enable higher rates.  For example, on
  347. the 5000/200, 19200 can be remapped (somehow, something to do with "a bit in
  348. the SIR", whatever that is) to 38400, but in software you must still refer to
  349. this speed as 19200; you can't have 19200 and 38400 available at the same time.
  350. 19200, reportedly, is also the highest speed supported by Ultrix, but NetBSD
  351. reportedly supports speeds up to 57600 on the DECstation, although whether and
  352. how well this works is another question.
  353. In any case, given the lack of hardware flow control in Ultrix, high serial
  354. speeds are problematic at best.
  355. (3.10) C-KERMIT AND UNIXWARE
  356. See also:
  357.   comp.unix.unixware.misc
  358.   comp.unix.sco.misc
  359. Also see general comments on PC-based UNIXes in Section 3.0.
  360. Note that in Unixware 2.0 and later, the preferred serial device names
  361. (drivers) are /dev/term/00 (etc), rather than /dev/tty00 (etc).
  362. Also note the following correspondence of device names and driver
  363. characteristics:
  364.   New name       Old name     Description
  365.   /dev/term/00   /dev/tty00   ???
  366.   /dev/term/00h  /dev/tty00h  Modem signals and hardware flow control
  367.   /dev/term/00m  /dev/tty00m  Modem signals(?)
  368.   /dev/term/00s  /dev/tty00s  Modem signals and software flow control
  369.   /dev/term/00t  /dev/tty00t  ???
  370. Lockfile names use device inode.major.minor numbers, e.g.:
  371.   /var/spool/locks/LK.7679.003.005
  372. The minor number varies according to the device name suffix (none, h, m, s,
  373. or t).  Only the inode and major number are compared, and thus all of
  374. the different names for the same physical device (e.g. all of those shown
  375. in the table above) interlock effectively.
  376. Prior to UnixWare 7, serial speeds higher than 38400 are not supported.  In
  377. UnixWare 7, we also support 57600 and 115200, plus some unexpected ones like
  378. 14400, 28800, and 76800, by virtue of a strange new interface, evidently
  379. peculiar to UnixWare 7, discovered while digging through the header files:
  380. tcsetspeed().  Access to this interface is allowed only in POSIX builds, and
  381. thus the UnixWare 7 version of C-Kermit is POSIX-based, unlike C-Kermit for
  382. Unixware 1.x and 2.x (since the earlier UnixWare versions did not support high
  383. serial speeds, period).
  384. HOWEVER, turning on POSIX features engages all of the "#if (!_POSIX_SOURCE)"
  385. clauses in the UnixWare header files, which in turn prevent us from having
  386. modem signals, access to the hardware flow control APIs, select(), etc -- in
  387. short, all the other things we need in communications software, especially
  388. when high speeds are used.  Oh the irony.  And so C-Kermit must be shamelessly
  389. butchered -- as it has been so many times before -- to allow us to have the
  390. needed features from the POSIX and non-POSIX worlds.  See the UNIXWAREPOSIX
  391. sections of ckutio.c.
  392. Meanwhile the tcsetspeed() function allows any number at all (any long, 0 or
  393. positive) as an argument and succeeds if the number is a legal bit rate for
  394. the serial device, and fails otherwise.  There is no list anywhere of legal
  395. speeds.  Thus the SET SPEED keyword table ("set speed ?" to see it) is
  396. hardwired based on trial and error with all known serial speeds, the maximum
  397. being 115200.  However, to allow for the possibility that other speeds might
  398. be allowed in the future (or with different port drivers), the SET SPEED
  399. command for UnixWare 7 only allows you to specify any number at all; a warning
  400. is printed if the number is not in the list, but the number is accepted
  401. anyway; the command succeeds if tcsetspeed() accepts the number, and fails
  402. otherwise.
  403. Old business:
  404. Using C-Kermit 6.0 on the UnixWare 1.1 Application Server, one user reported
  405. a system panic when the following script program is executed:
  406.   set line /dev/tty4
  407.   set speed 9600
  408.   output 13
  409.   connect
  410. The panic does not happen if a PAUSE is inserted:
  411.   set line /dev/tty4
  412.   set speed 9600
  413.   pause 1
  414.   output 13
  415.   connect
  416. This is using a Stallion EasyIO card installed as board 0 on IRQ 12 on
  417. a Gateway 386 with the Stallion-supplied driver.  The problem was reported
  418. to Novell and Stallion and (reportedly) is now fixed.
  419. (3.11) C-KERMIT AND APOLLO SR10
  420. Reportedly, version 5A(190), when built under Apollo SR10 using "make
  421. sr10-bsd", compiles, links, and executes OK, but leaves the terminal unusable
  422. after it exits -- the "cs7" or "cs8" (character size) parameter has become
  423. cs5.  The terminal must be reset from another terminal.  Cause and cure
  424. unknown.  Suggested workaround: Wrap Kermit in a shell script something like:
  425.   kermit @*
  426.   stty sane
  427. (3.12) C-KERMIT AND TANDY XENIX 3.0
  428. C-Kermit 7.0 is too big to be built on Tandy Xenix, even in a minimum
  429. configuration; version 6.0 is the last one that fits.  In C-Kermit 6.0:
  430. Reportedly, if you type lots of Ctrl-C's during execution of the
  431. initialization file, ghost Kermit processes will be created, and will compete
  432. for the keyboard.  They can only be removed via "kill -9" from another
  433. terminal, or by rebooting.  Diagnosis -- something strange happening with
  434. the SIGINT handler while the process is reading the directory (it seems to
  435. occur during the SET PROMPT [v(dir)] ... sequence).  Cure: unknown.
  436. Workaround: don't interrupt C-Kermit while it is executing its init file on
  437. the Tandy 16/6000.
  438. (3.13) C-KERMIT AND OSF/1 (DIGITAL UNIX)
  439. Before you can use a serial port on a new Digital Unix system, you must run
  440. uucpsetup to enable or configure the port.  Evidently the /dev/tty00 and 01
  441. devices that appear in the configuration are not usable; uucpsetup turns them
  442. into /dev/ttyd00 and 01, which are.  Note that uucpsetup and other uucp-family
  443. programs are quite primitive -- they only know about speeds up to 9600 bps and
  444. their selection of modems dates from the early 1980s.  None of this affects
  445. Kermit, though -- with C-Kermit, you can use speeds up to 115200 bps (at least
  446. in DU4.0 and later) and modern modems with hardware flow control and all the
  447. rest.
  448. Reportedly, if a modem is set for &S0 (assert DSR at all times), the system
  449. resets or drops DTR every 30 seconds; reportedly DEC says to set &S1.
  450. Digital UNIX 3.2 evidently wants to believe your terminal is one line longer
  451. than you say it is, e.g. when a "more" or "man" command is given.  This is has
  452. nothing to do with C-Kermit, but tends to annoy those who use Kermit or other
  453. terminal emulators to access Digital UNIX systems.  Workaround: tell UNIX
  454. to "stty rows 23" (or whatever).
  455. Reportedly, there is some bizarre behavior when trying to use a version of
  456. C-Kermit built on Digital Unix 4.0 on another, possibly due to differing
  457. OS or library revision levels; for example, the inability to connect to
  458. certain TCP/IP hosts.  Solution: rebuild C-Kermit from source code on the
  459. system where you will be using it.
  460. Digital UNIX tgetstr() causes a segmentation fault.  C-Kermit 7.0 includes
  461. #ifdefs to avoid calling this routine in Digital UNIX.  As a result, the
  462. SCREEN commands always send ANSI escape sequences -- even though curses knows
  463. your actual terminal type.
  464. (3.14) C-KERMIT AND SGI IRIX
  465. See also:
  466.   The comp.sys.sgi.misc and .admin newsgroups.
  467.   The SGI FAQ:
  468.     http://www-viz.tamu.edu/~sgi-faq/
  469.     ftp://viz.tamu.edu/pub/sgi/faq/
  470. About IRIX version numbers: "uname -a" tells the "two-digit" version number,
  471. such as "5.3" or "6.5".  The three-digit form can be seen with "uname -R".
  472. (this information is unavailable at the simple API level).  Supposedly all
  473. three-digit versions within the same two-digit version (e.g. 6.5.2, 6.5.3) are
  474. binary compatible; i.e. a binary built on any one of them should run on all
  475. others.  The "m" suffix denotes just patches; the "f" suffix indicates that
  476. features were added.
  477. SGI did not supply an API for hardware flow control prior to IRIX 5.2.
  478. C-Kermit 6.1 and higher for IRIX 5.2 and higher supports hardware flow control
  479. in the normal way, via "set flow rts/cts".
  480. For hardware flow control on earlier IRIX and/or C-Kermit versions, use the
  481. ttyf* (modem control AND hardware flow control) devices and not the ttyd*
  482. (direct) or ttym* (modem control but no hardware flow control) ones, and
  483. obtain the proper "hardware handshaking" cable from SGI, which is incompatible
  484. with the ones for the Macintosh and NeXT even though they look the same.  "man
  485. serial" for further info.
  486. Serial speeds higher than 38400 are available in IRIX 6.2 and later, on
  487. O-class machines (e.g. Origin, Octane) only, and are supported by C-Kermit 6.1
  488. and later.  Commands such as "set speed 115200" may be given on other models
  489. (e.g. Iris, Indy, Indigo) but will fail because the OS reports an invalid
  490. speed for the device.
  491. Experimentation with both IRIX 5.3 and 6.2 shows that when logged in to IRIX
  492. via Telnet, that remote-mode C-Kermit can't send files if the packet length is
  493. greater than 4096; the Telnet server evidently has this restriction (or bug),
  494. since there is no problem sending long packets on serial or rlogin
  495. connections.  However, it can receive files with no problem if the packet
  496. length is greater than 4096.  As a workaround, the FAST macro for IRIX
  497. includes "set send packet-length 4000".  IRIX 6.5.1 does not have this
  498. problem, so evidently it was fixed some time after IRIX 6.2.  Tests show
  499. file-transfer speeds are better (not worse) with 8K packets than with 4K
  500. packets from IRIX 6.5.1.
  501. Reportedly some Indys have bad serial port hardware.  IRIX 5.2, for example,
  502. needs patch 151 to work around this; or upgrade to a later release.
  503. Similarly, IRIX 5.2 has several problems with serial i/o, flow control, etc.
  504. Again, patch or upgrade.
  505. Reportedly on Silicon Graphics (SGI) machines with IRIX 4.0, Kermit cannot be
  506. suspended by typing the suspend ("swtch") character if it was started from
  507. csh, even though other programs can be suspended this way, and even though the
  508. Z and SUSPEND commands still work correctly.  This is evidently because IRIX's
  509. csh does not deliver the SIGTSTP signal to Kermit.  The reason other programs
  510. can be suspended in the same environment is probably that they do not trap
  511. SIGTSTP themselves, so the shell is doing the suspending rather than the
  512. application.
  513. Also see notes about IRIX 3.x in ckcuins.txt.
  514. (3.15) C-KERMIT AND THE BEBOX
  515. See also: The comp.sys.be newsgroup.
  516. The BeBox has been discontinued and BeOS repositioned for PC platforms.
  517. The POSIX parts of BeOS are not finished, nor is the sockets library,
  518. therefore a fully functional version of C-Kermit is not possible.
  519. In version 6.0 of C-Kermit, written for BeOS DR7, it was possible to:
  520.   - set line /dev/serial2 (and probably the other serial ports)
  521.   - set speed 115200 (and at least some of the lower baud rates)
  522.   - connect
  523.   - set modem type hayes (and likely others, too)
  524.   - dial [phone number]
  525.   - set send packet length 2048 (other lengths for both send and receive)
  526.   - set receive packet length 2048
  527.   - set file type binary (text mode works, too)
  528.     (with remote kermit session in server mode)
  529.   - put bedrop.jpg
  530.   - get bedrop.jpg
  531.   - get bedrop.jpg bedrop.jpg2
  532.   - finish, bye
  533. The following do not work:
  534.   - kermit does not detect modem hangup
  535.   - !/RUN/PUSH [commandline command]
  536.   - running kermit in remote mode
  537.   - using other protocols (x/y/zmodem)
  538.   - TCP networking interface (Be's TCP/IP API has a ways to go, still)
  539. C-Kermit does not work on BeOS DR8 because of changes in the underlying APIs.
  540. Unfortunately not enough changes were made to allow the regular POSIX-based
  541. C-Kermit to work either.  Note: the lack of a fork() service requires the
  542. select()-based CONNECT module, but there is no select().  There is a select()
  543. in DR8, but it doesn't work.
  544. C-Kermit 7.0 has been built for BeOS 4.5 and it works in remote mode.
  545. It does not include networking support since the APIs are still not there.
  546. It is not known if dialing out works, but probably not.
  547. (3.16) C-KERMIT AND DG/UX
  548. Somebody downloaded the C-Kermit 6.0 binary built under DG/UX 5.40 and ran it
  549. under DG/UX 5.4R3.10 -- it worked OK except that file dates for incoming files
  550. were all written as 1 Jan 1970.  Cause and cure unknown.  Workaround: SET
  551. ATTRIBUTE DATE OFF.  Better: Use a version of C-Kermit built under and for
  552. DG/UX 5.4R3.10.
  553. (3.17) C-KERMIT AND SEQUENT DYNIX
  554. Reportedly, when coming into a Sequent UNIX (DYNIX) system through an X.25
  555. connection, Kermit doesn't work right because the Sequent's FIONREAD ioctl
  556. returns incorrect data.  To work around, use the 1-character-at-a-time version
  557. of myread() in ckutio.c (i.e. undefine MYREAD in ckutio.c and rebuild the
  558. program).  This is unsatisfying because two versions of the program would be
  559. needed -- one for use over X.25, and the other for serial and TCP/IP
  560. connections.
  561. (3.18) C-KERMIT AND {FREE,OPEN,NET}BSD
  562. Some NebBSD users have reported difficulty escaping back from CONNECT mode,
  563. usually when running NetBSD on non-PC hardware.  Probably a keyboard issue.
  564. NetBSD users have also reported that C-Kermit doesn't pop back to the prompt
  565. if the modem drops carrier.  This needs to be checked out & fixed if possible.
  566. (All of this seems to work properly in C-Kermit 7.0.)
  567. (4) GENERAL UNIX-SPECIFIC HINTS, LIMITATIONS, AND BUGS
  568. In version 6.0, the default C-Kermit prompt includes your current (working)
  569. directory; for example:
  570.   [/usr/olga] C-Kermit>
  571. If that directory is on an NFS-mounted disk, and NFS stops working or the
  572. disk becomes unavailable, C-Kermit will hang waiting for NFS and/or the disk
  573. to come back.  Whether you can interrupt C-Kermit when it is hung this way
  574. depends on the specific OS.  Kermit has called the operating systems's
  575. getcwd() function, and is waiting for it to return.  Some versions of UNIX
  576. (e.g. HP-UX 9.x) allow this function to be interrupted with SIGINT (Ctrl-C),
  577. others (such as HP-UX 8.x) do not.  To avoid this effect, you can always
  578. use SET PROMPT change your prompt to something that does not involve calling
  579. getcwd(), but if NFS is not responding, C-Kermit will still hang any time you
  580. give a command that refers to an NFS-mounted directory.  Also note that in some
  581. cases, the uninterruptibility of NFS-dependent system or library calls is
  582. considered a bug, and sometimes there are patches.  For HP-UX, for example:
  583.                                                         replaced by:
  584.   HP-UX 10.20     libc    PHCO_8764                     PHCO_14891/PHCO_16723
  585.   HP-UX 10.10     libc    PHCO_8763                     PHCO_14254/PHCO_16722
  586.   HP-UX 9.x       libc    PHCO_7747       S700          PHCO_13095
  587.   HP-UX 9.x       libc    PHCO_6779       S800          PHCO_11162
  588. You might have reason to make C-Kermit the login shell for a specific user,
  589. by entering the pathname of Kermit (possibly with command-line switches, such
  590. as -x to put it in server mode) into the shell field of the /etc/passwd file.
  591. This works pretty well.  In some cases, for "ultimate security", you might
  592. want to use a version built with -DNOPUSH (see ckccfg.txt) for this, but even
  593. if you don't, then PUSHing or shelling out from C-Kermit just brings up a
  594. new copy of C-Kermit (but warning: this does not prevent the user from
  595. explicitly running a shell; e.g. "run /bin/sh"; use NOPUSH to prevent this).
  596. C-Kermit will not work as expected on a remote UNIX system, when used through
  597. the "splitvt" or GNU "screen" programs.  In this case, terminal connections to
  598. the remote UNIX system work, but attempts to transfer files fail because the
  599. screen optimization (or at least, line wrapping, control-character absorption)
  600. done by this package interferes with Kermit's packets.
  601. The same can apply to any other environment in which the user's session is
  602. captured, monitored, recorded, or manipulated.  Examples include the 'script'
  603. program (for making a typescript of a session), the Computronics PEEK package
  604. and pksh (at least versions of it prior to 1.9K), and so on.
  605. You might try the following -- what we call "doomsday Kermit" -- settings to
  606. push packets through even the densest and most obstructive connections, such
  607. as "screen" and "splitvt" (and certain kinds of 3270 protocol emulators):
  608. Give these commands to BOTH Kermit programs:
  609.   SET FLOW NONE
  610.   SET CONTROL PREFIX ALL
  611.   SET RECEIVE PACKET-LENGTH 70
  612.   SET RECEIVE START 62
  613.   SET SEND START 62
  614.   SET SEND PAUSE 100
  615.   SET BLOCK B
  616. If it works, it will be slow.
  617. On UNIX workstations equipped with DOS emulators like SoftPC, watch out for
  618. what these emulators do to the serial port drivers.  After using a DOS
  619. emulator, particularly if you use it to run DOS communications software, you
  620. might have to reconfigure the serial ports for use by UNIX.
  621. On AT&T 7300 (3B1) machines, you might have to "stty nl1" before starting
  622. C-Kermit.  Do this if characters are lost during communications operations.
  623. Under the bash shell (versions prior to 1.07 from CWRU), "pushing" to an
  624. inferior shell and then exiting back to Kermit leaves Kermit in the background
  625. such that it must be explicitly fg'd.  This is reportedly fixed in version
  626. 1.07 of bash.
  627. Interruption by Ctrl-Z makes UNIX C-Kermit try to suspend itself with
  628. kill(0,SIGSTOP), but only on systems that support job control, as determined
  629. by whether the symbol SIGTSTP is defined (or on POSIX or SVR4 systems, if
  630. syconf(_SC_JOB_CONTROL) or _POSIX_JOB_CONTROL in addition to SIGTSTP).
  631. However, if Kermit is running under a login shell (such as the original Bourne
  632. shell) that does not support job control, the user's session hangs and must be
  633. logged out from another terminal, or hung up on.  There is no way Kermit can
  634. defend itself against this.  If you use a non-job control shell on a computer
  635. that supports job control, give a command like "stty susp undef" to fix it so
  636. the suspend signal is not attached to any particular key, or give the command
  637. SET SUSPEND OFF to C-Kermit, or build C-Kermit with -DNOJC.
  638. Reportedly, the UNIX C-Kermit server, under some conditions, on certain
  639. particular systems, fails to log out its login session upon receipt of a
  640. BYE command.  Before relying on the BYE command working, test it a few times
  641. to make sure it works on your system: there might be system configuration or
  642. security mechanisms to prevent an inferior process (like Kermit) from
  643. killing a superior one (like the login shell).
  644. (5) INITIALIZATION AND COMMAND FILES
  645. C-Kermit's initialization file for UNIX is .kermrc (lowercase, starts with
  646. period) in your home directory, unless Kermit was built with the system-wide
  647. initialization-file option (see ckuins.txt).
  648. C-Kermit identifies your home directory based on the environment variable,
  649. HOME.  Most UNIX systems set this variable automatically when you log in.  If
  650. C-Kermit can't find your initialization file, check your HOME variable:
  651.   echo $HOME      (at the UNIX prompt)
  652. or:
  653.   echo $(HOME)   (at the C-Kermit prompt)
  654. If HOME is not defined, or is defined incorrectly, add the appropriate
  655. definition to your UNIX .profile or .login file, depending on your shell:
  656.   setenv HOME full-pathname-of-your-home-directory  (C-Shell, .login file)
  657. or:
  658.   HOME=full-pathname-of-your-home-directory         (sh, ksh, .profile file)
  659.   export HOME
  660. NOTE: Various other operations depend on the correct definition of HOME.
  661. These include the "tilde-expansion" feature, which allows you to refer to
  662. your home directory as "~" in filenames used in C-Kermit commands, e.g.
  663.   send ~/.kermrc
  664. as well as the v(home) variable.
  665. Prior to version 5A(190), C-Kermit would look for its initialization file in
  666. the current directory if it was not found in the home directory.  This feature
  667. was removed from 5A(190) because it was a security risk.  Some people, however,
  668. liked this behavior and had .kermrc files in all their directories that would
  669. set up things appropriately for the files therein.  If you want this behavior,
  670. you can accomplish it in various ways, for example:
  671.  . Create a shell alias, for example:
  672.    alias kd="kermit -Y ./.kermrc"
  673.  . Create a .kermrc file in your home directory, whose contents are:
  674.    take ./.kermrc
  675. The TAKE command does not search your UNIX PATH for command files.  If a
  676. command file is not in the current directory, you must give a full path
  677. specification for it.  This poses a problem for TAKE commands that are
  678. themselves in TAKE files.  See the trick used in CKETEST.INI...
  679. Suppose you need to pass a password from the UNIX command line to a C-Kermit
  680. script program, in such a way that it does not show up in "ps" or "w" listings.
  681. Here is a method (not guaranteed to be 100% secure, but definitely more secure
  682. than the more obvious methods):
  683.   echo mypassword | kermit myscript
  684. The "myscript" file contains all the commands that need to be executed during
  685. the Kermit session, up to and including EXIT, and also includes an ASK or ASKQ
  686. command to read the password from standard input, which has been piped in from
  687. the UNIX 'echo' command, but it must not include a CONNECT command.  Only
  688. "kermit myscript" shows up in the ps listing.
  689. (6) COMMUNICATION SPEED SELECTION
  690. Version-7 based UNIX implementations, including 4.3 BSD and earlier and UNIX
  691. systems based upon BSD, use a 4-bit field to record a serial device's terminal
  692. speed.  This leaves room for 16 speeds, of which the first 14 are normally:
  693.   0, 50, 75, 110, 134.5, 150, 200, 300, 600, 1200, 1800, 2400, 4800, and 9600
  694. The remaining two are usually called EXTA and EXTB, and are defined by the
  695. particular UNIX implementation.  C-Kermit determines which speeds are
  696. available on your system based on whether symbols for them are defined in your
  697. terminal device header files.  EXTA is generally assumed to be 19200 and EXTB
  698. 38400, but these assumptions might be wrong, or they might not apply to a
  699. particular device that does not support these speeds.  Presumably, if you try
  700. to set a speed that is not legal on a particular device, the driver will
  701. return an error, but this can not be guaranteed.
  702. On these systems, it is usually not possible to select a speed of 14400 bps
  703. for use with V.32bis modems.  In that case, use 19200 or 38400 bps, configure
  704. your modem to lock its interface speed and to use RTS/CTS flow control, and
  705. tell C-Kermit to SET FLOW RTS/CTS and SET DIAL SPEED-MATCHING OFF.
  706. The situation is similar, but different, in System V.  SVID Third Edition
  707. lists the same speeds, 0 through 38400.
  708. Some versions of UNIX, and/or terminal device drivers that come with
  709. certain third-party add-in high-speed serial communication interfaces, use the
  710. low "baud rates" to stand for higher ones.  For example, SET SPEED 50 gets you
  711. 57600 bps; SET SPEED 75 gets you 76800; SET SPEED 110 gets 115200.
  712. SCO ODT 3.0 is an example where a "baud-rate-table patch" can be applied that
  713. can rotate the tty driver baud rate table such that 600=57600 and 1800=115k
  714. baud.   Similarly for Digiboard multiport/portservers, which have a
  715. "fastbaud" setting that does this.  Linux has a "setserial" command that can
  716. do it, etc.
  717. More modern UNIXes support POSIX-based speed setting, in which the selection
  718. of speeds is not limited by a 4-bit field.  C-Kermit 6.1 incorporates a new
  719. mechanism for finding out (at compile time) which serial speeds are supported
  720. by the operating system that does not involve editing of source code by hand;
  721. on systems like Solaris 5.1, IRIX 6.2, and SCO OSR5.0.4, "set speed ?" will
  722. list speeds up to 460800 or 921600.  In C-Kermit 7.0:
  723.  1. If a symbol for a particular speed (say B230400 for 230400 bps) appears
  724.     in whatever header file defines acceptable serial speeds (e.g. <termbits.h>
  725.     or <sys/termios.h> or <sys/ttydev.h>, etc), the corresponding speed will
  726.     appear in C-Kermit's "set speed ?" list.
  727.  2. The fact that a given speed is listed in the header files and appears in
  728.     C-Kermit's list does not mean the driver will accept it.  For example,
  729.     a computer might have some standard serial ports plus some add-on ones
  730.     with different drivers that accept a different repertoire of speeds.
  731.  3. The fact that a given speed is accepted by the driver does not guarantee
  732.     the underlying hardware can accept it.
  733. When Kermit is given a "set speed" command for a particular device, the
  734. underlying system service is called to set the speed; its return code is
  735. checked and the SET SPEED command fails if the return code indicates failure.
  736. Regardless of the system service return status, the device's speed is then
  737. read back and if it does not match the speed that was requested, an error
  738. message is printed and the command fails.
  739. Even when the command succeeds, this does not guarantee successful operation
  740. at a particular speed, especially a high one.  That depends on electricity,
  741. information theory, etc.  How long is the cable, what is its capacitance, how
  742. well is it shielded, etc, not to mention that every connection has two ends
  743. and its success depends on both of them.  (With the obvious caveats about
  744. internal modems, is the cable really connected, interrupt conflicts, etc etc
  745. etc).
  746. Note, in particular, that there is a certain threshold above which modems can
  747. not "autobaud" -- i.e. detect the serial interface speed when you type AT (or
  748. whatever else the modem's recognition sequence might be).  Such modems need to
  749. be engaged at a lower speed (say 2400 or 9600 or even 115200 -- any speed
  750. below their autobaud threshold) and then must be given a modem-specific
  751. command (which can be found in the modem manual) to change their interface
  752. speed to the desired higher speed, and then the software must also be told to
  753. change to the new, higher speed.
  754. For additional information, read the section TERMINAL SPEEDS in ckuins.txt,
  755. plus any platform-specific notes in Section (3) above.
  756. (7) COMMUNICATIONS AND DIALING
  757. If you SET LINE to a serial port modem-control device that has nothing plugged
  758. in to it, or has a modem connected that is powered off, and you have not given
  759. a prior SET MODEM TYPE or SET CARRIER-WATCH OFF command, the SET LINE command
  760. is likely to hang.  In most cases, you can Ctrl-C out.  If not, you'll have to
  761. kill C-Kermit from another terminal.
  762. Similarly, if you give a SET MODEM TYPE HAYES (or USR, or any other modem type
  763. besides DIRECT, NONE, or UNKNOWN) and then SET LINE to an empty port, the
  764. subsequent close (implicit or explicit) is liable to hang or even crash
  765. (through no fault of Kermit's -- the hanging or crashing is inside a system
  766. call such as cfsetospeed() or close()).
  767. The SET CARRIER-WATCH command works as advertised only if the underlying
  768. operating system and device drivers support this feature; in particular only
  769. if a read() operation returns immediately with an error code if the carrier
  770. signal goes away or, failing that, if C-Kermit can obtain the modem signals
  771. from the device driver (you can tell by giving a "set line" command to a
  772. serial device, and then a "show communications" command -- if modem signals
  773. are not listed, C-Kermit won't be able to detect carrier loss, the WAIT
  774. command will not work, etc).  Of course, the device itself (e.g. modem) must
  775. be configured appropriately and the cables convey the carrier and other needed
  776. signals, etc.
  777. If you dial out from UNIX system, but then notice a lot of weird character
  778. strings being stuck into your session at random times (especially if they look
  779. like +++ATQ0H0 or login banners or prompts), that means that getty is also
  780. trying to control the same device.  You'll need to dial out on a device that
  781. is not waiting for a login, or else disable getty on the device.
  782. In version 7.0, C-Kermit makes a lot of explicit checks for the Carrier Detect
  783. signal, and so catches hung-up connections much better than 6.0 and earlier.
  784. However, it still can not be guaranteed to catch every ever CD on-to-off
  785. transition.  For example, when the HP-UX version of C-Kermit is in CONNECT
  786. mode on a dialed connection and CARRIER-WATCH ON or AUTO, and you turn off
  787. the modem, HP-UX is stuck in a read() that never returns.  (C-Kermit does not
  788. pop back to its prompt automatically, but you can still escape back.)
  789. If, on the other hand, you log out from the remote system, and it hangs up,
  790. and CD drops on the local modem, C-Kermit detects this and pops back to the
  791. prompt as it should.  (Evidently there can be a difference between CD and DSR
  792. turning off at the same time, versus CD turning off while DSR stays on;
  793. experimentation with &S0/&S1/&S2 on your modem might produce the desired
  794. results).
  795. When UNIX C-Kermit exits, it closes (and must close) the communications
  796. device.  If you were dialed out, this will most likely hang up the connection.
  797. If you want to get out of Kermit and still use Kermit's communication device,
  798. you have several choices:
  799.  1. Shell out from Kermit or suspend Kermit, and refer to the device literally
  800.     (as in "term -blah -blah < /dev/cua > /dev/cua").
  801.  2. Shell out from Kermit and use the device's file descriptor which Kermit
  802.     makes available to you in the v(ttyfd) variable.
  803.  3. Use C-Kermit's REDIRECT command.  See the ckermit2.txt file about this.
  804.  4. Use C-Kermit new EXEC /REDIRECT command, also described in ckermit2.txt.
  805. If you are having trouble dialing:
  806.  1. Make sure the dialout line is configured correctly.  More
  807.     about this below.
  808.  2. Make sure all necessary patches are installed for your operating
  809.     system.
  810.  3. If you can't dial on a "bidirectional" line, then configure it for
  811.     outbound-only (remove the getty) and try again.  (The mechanisms -- if
  812.     any -- for grabbing bidirectional lines for dialout vary wildly
  813.     among UNIX implementations and releases, and C-Kermit -- which runs on
  814.     well over 300 different UNIX variations -- makes no effort to keep up
  815.     with them; the recommended method for coping with this situation is to
  816.     wrap C-Kermit in a shell script that takes the appropriate actions.)
  817.  4. Make sure C-Kermit's SET DIAL and SET MODEM parameters agree with the
  818.     modem you are actually using -- pay particular attention to SET DIAL
  819.     SPEED-MATCHING.
  820.  5. Try SET DIAL HANGUP OFF before the DIAL command.  Also, SET DIAL DISPLAY
  821.     ON to watch what's happening.  See section 8 of ckuins.txt.
  822.  6. Read pages 50-67 of "Using C-Kermit".
  823.  7. As a last resort, don't use the DIAL command at all; SET CARRIER OFF and
  824.     CONNECT to the modem and dial interactively, or write a script program to
  825.     dial the modem.
  826. Make sure your dialout line is correctly configured for dialing out (as
  827. opposed to login).  The method for doing this is different for each kind of
  828. UNIX system.  Consult your system documentation for configuring lines for
  829. dialing out (for example, SUN SparcStation IPC users should read the section
  830. "Setting up Modem Software" in the Desktop SPARC Sun System & Network
  831. Manager's Guide; HP-9000 workstation users should consult the manual
  832. "Configuring HP-UX for Peripherals", etc).
  833. Symptom: DIAL works, but a subsequent CONNECT command does not.  Diagnosis:
  834. the modem is not asserting Carrier Detect (CD) after the connection is made,
  835. or the cable does not convey the CD signal.  Cure: Reconfigure the modem,
  836. replace the cable.  Workaround: SET CARRIER OFF (at least in System-V based
  837. UNIX versions).
  838. C-Kermit tries to use the 8th bit for data when parity is NONE, and this
  839. generally works on real UNIX terminal (tty) devices, but it often does not
  840. work when the UNIX system is accessed over a network via telnet or rlogin
  841. protocols, including (in many cases) through terminal servers.  For example,
  842. an Encore computer with Annex terminal servers only gives a 7-bit path if
  843. the rlogin protocol is selected in the terminal server but it gives the full
  844. 8 bits if the proprietary RDP protocol is used.
  845. If file transfer does not work through a host to which you have rlogin'd,
  846. use "rlogin -8" rather than "rlogin".  If that doesn't work, tell both Kermit
  847. programs to "set parity space".
  848. The Encore TELNET server does not allow long bursts of input.  When you have
  849. a TELNET connection to an Encore, tell C-Kermit on the Encore to SET RECEIVE
  850. PACKET-LENGTH 200 or thereabouts.
  851. For Berkeley-UNIX-based systems (4.3BSD and earlier), Kermit includes code to
  852. use LPASS8 mode when parity is none, which is supposed to allow 8-bit data and
  853. Xon/Xoff flow control at the same time.  However, as of edit 174, this code is
  854. entirely disabled because it is unreliable: even though the host operating
  855. system might (or might not) support LPASS8 mode correctly, the host access
  856. protocols (terminal servers, telnet, rlogin, etc) generally have no way of
  857. finding out about it and therefore render it ineffective, causing file
  858. transfer failures.  So as of edit 174, Kermit once again uses rawmode for
  859. 8-bit data, and so there is no Xon/Xoff flow control during file transfer or
  860. terminal emulation in the Berkeley-based versions (4.3 and earlier, not 4.4).
  861. Also on Berkeley-based systems (4.3 and earlier), there is apparently no way
  862. to configure a dialout line for proper carrier handling, i.e. ignore carrier
  863. during dialing, require carrier thereafter, get a fatal error on any attempt
  864. to read from the device after carrier drops (this is handled nicely in System
  865. V by manipulation of the CLOCAL flag).  The symptom is that carrier loss does
  866. not make C-Kermit pop back to the prompt automatically.  This is evident on
  867. the NeXT, for example, but not on SunOS, which supports the CLOCAL flag.  This
  868. is not a Kermit problem, but a limitation of the underlying operating system.
  869. For example, the cu program on the NeXT doesn't notice carrier loss either,
  870. whereas cu on the Sun does.
  871. On certain AT&T UNIX systems equipped with AT&T modems, DIAL and HANGUP don't
  872. work right.  Workarounds: (1) SET DIAL HANGUP OFF before attempting to dial;
  873. (2) If HANGUP doesn't work, SET LINE, and then SET LINE <device> to totally
  874. close and reopen the device.  If all else fails, SET CARRIER OFF.
  875. C-Kermit does not contain any particular support for AT&T DataKit devices.
  876. You can use Kermit software to dial in to a DataKit line, but C-Kermit does
  877. not contain the specialized code required to dial out from a DataKit line.  If
  878. the UNIX system is connected to DataKit via serial ports, dialout should work
  879. normally (e.g. set line /dev/ttym1, set speed 19200, connect, and then see the
  880. DESTINATION: prompt, from which you can connect to another computer on the
  881. DataKit network or to an outgoing modem pool, etc).  But if the UNIX system
  882. is connected to the DataKit network through the special DataKit interface
  883. board, then SET LINE to a DataKit pseudodevice (such as /dev/dk031t) will not
  884. work (you must use the DataKit "dk" or "dkcu" program instead).
  885. In some BSD-based UNIX C-Kermit versions, SET LINE to a port that has nothing
  886. plugged in to it with SET CARRIER ON will hang the program (as it should), but
  887. it can't be interrupted with Ctrl-C.  The interrupt trap is correctly armed,
  888. but apparently the UNIX open() call cannot be interrupted in this case.  When
  889. SET CARRIER is OFF or AUTO, the SET LINE will eventually return, but then the
  890. program hangs (uninterruptibly) when the EXIT or QUIT command (or, presumably,
  891. another SET LINE command) is given.  The latter is probably because of the
  892. attempt to hang up the modem.  (In edit 169, a timeout alarm was placed around
  893. this operation.)
  894. With SET DIAL HANGUP OFF in effect, the DIAL command might work only once,
  895. but not again on the same device.  In that case, give a SET LINE command
  896. with no arguments to close the device, and then another SET LINE command for
  897. the desired device.  Or rebuild your version of Kermit with the -DCLSOPN
  898. compile-time switch (see ckuins.txt).
  899. The DIAL command says "To cancel: Type your interrupt character (normally
  900. Ctrl-C)."  This is just one example of where program messages and
  901. documentation assume your interrupt character is Ctrl-C.  But it might be
  902. something else.  In most (but not necessarily all) cases, the character
  903. referred to is the one that generates the SIGINT signal.  If Ctrl-C doesn't
  904. act as an interrupt character for you, type the Unix command "stty -a" or
  905. "stty all" or "stty everything" to see what your interrupt character is.
  906. (Kermit could be made to find out what the interrupt character is, but this
  907. would require a lot of system-dependent coding and #ifdefs, and a new routine
  908. and interface between the system-dependent and system-independent parts of the
  909. program.)
  910. In general, the hangup operation on a serial communication device is prone
  911. to failure.  C-Kermit tries to support many, many different kinds of
  912. computers, and there seems to be no portable method for hanging up a modem
  913. connection (i.e. turning off the RS-232 DTR signal and then turning it back on
  914. again).  If HANGUP, DIAL, and/or Ctrl-H do not work for you, and you are a
  915. programmer, look at the tthang() function in ckutio.c and see if you can add
  916. code to make it work correctly for your system, and send the code to the
  917. address above.  (NOTE: This problem has been largely sidestepped as of edit
  918. 188, in which Kermit first attempts to hang up the modem by "escaping back"
  919. via +++ and then giving the modem's hangup command, e.g. ATH0, when DIAL
  920. MODEM-HANGUP is ON, which is the default setting.)
  921. Even when Kermit's modem-control software is configured correctly for your
  922. computer, it can only work right if your modem is also configured to assert
  923. the CD signal when it is connected to the remote modem and to hang up the
  924. connection when your computer drops the DTR signal.  So before deciding Kermit
  925. doesn't work with your modem, check your modem configuration AND the cable (if
  926. any) connecting your modem to the computer -- it should be a straight-through
  927. modem cable conducting the signals FG, SG, TD, RD, RTS, CTS, DSR, DTR, CD,
  928. and RI.
  929. Many UNIX systems keep aliases for dialout devices; for example, /dev/acu
  930. might be an alias for /dev/tty00.  But most of these UNIX systems also use
  931. UUCP lockfile conventions that do not take this aliasing into account, so if
  932. one user assigns (e.g.) /dev/acu, then another user can still assign the same
  933. device by referring to its other name.  This is not a Kermit problem --
  934. Kermit must follow the lockfile conventions used by the vendor-supplied
  935. software (cu, tip, uucp).
  936. The SET FLOW-CONTROL KEEP option should be given *before* any communication
  937. (dialing, terminal emulation, file transfer, INPUT/OUTPUT/TRANSMIT, etc) is
  938. attempted, if you want C-Kermit to use all of the device's preexisting
  939. flow-control related settings.  The default flow-control setting is XON/XOFF,
  940. and it will take effect when the first communication-related command is given,
  941. and a subsequent SET FLOW KEEP command will not necessarily know how to
  942. restore *all* of the device's original flow-control settings.
  943. (8) HARDWARE FLOW CONTROL
  944. SET FLOW RTS/CTS is available in UNIX C-Kermit only when the underlying
  945. operating system provides an Application Program Interface (API) for turning
  946. this feature on and off under program control, which turns out to be a rather
  947. rare feature among UNIX systems.  To see if your UNIX C-Kermit version
  948. supports hardware flow control, type "set flow ?" at the C-Kermit prompt, and
  949. look for "rts/cts" among the options.  Other common situations include:
  950.  1. The API is available, so "set flow rts/cts" appears as a valid C-Kermit
  951.     command, but it doesn't do anything because the device driver (part of
  952.     the operating system) was never coded to do hardware flow control.  This
  953.     is common among System V R4 implementations (details below).
  954.  2. The API is not available, so "set flow rts/cts" does NOT appear as a valid
  955.     C-Kermit command, but you can still get RTS/CTS flow control by selecting
  956.     a specially named device in your SET LINE command.  Examples:
  957.       NeXTSTEP: /dev/cufa instead of /dev/cua, /dev/cufb instead of /dev/cub
  958.       (68040 only; "man zs" for further info).
  959.       IRIX: /dev/ttyf2 instead of /dev/ttyd2 or /dev/ttym2 ("man 7 serial").
  960.  3. The API is available, doesn't work, but a workaround as in (2) can be used.
  961.  4. The API is available, but Kermit doesn't know about it.  In these cases,
  962.     you can usually use an stty command to enable RTS/CTS on the device, e.g.
  963.     "stty crtscts" or "stty ctsflow", "stty rtsflow", before starting Kermit,
  964.     and then tell Kermit to SET FLOW KEEP.
  965.  5. No API and no special device drivers.  Hardware flow control is completely
  966.     unavailable.
  967. System V R4 based UNIXes are supposed to supply a <termiox.h> file, which
  968. gives Kermit the necessary interface to command the terminal driver to
  969. enable/disable hardware flow control.  Unfortunately, but predictably, many
  970. implementations of SVR4 whimsically place this file in /usr/include/sys rather
  971. than /usr/include (where SVID clearly specifies it should be; see SVID, Third
  972. Edition, V1, termiox(BA_DEV).  Thus if you build C-Kermit with any of the
  973. makefile entries that contain -DTERMIOX or -DSTERMIOX (the latter to select
  974. <sys/termiox.h>), C-Kermit will have "set flow rts/cts" and possibly other
  975. hardware flow-control related commands.  BUT...  That does not necessarily
  976. mean that they will work.  In some cases, the underlying functions are simply
  977. not coded into the operating system.
  978. (9) TERMINAL CONNECTION AND KEY MAPPING
  979. UNIX C-Kermit is not a terminal emulator.  Refer to page 147 of "Using
  980. C-Kermit", 2nd Edition: "Most versions of C-Kermit -- UNIX, VMS, AOS/VS, VOS,
  981. etc -- provide terminal connection without emulation.  These versions act as a
  982. 'semitransparent pipe' between the remote computer and your terminal, terminal
  983. emulator, console driver, or window, which in turn emulates (or is) a specific
  984. kind of terminal."  The environment in which you run C-Kermit is up to you.
  985. If you are an X Windows user, you should be aware of an alternative to xterm
  986. that supports VT220 emulation, from Thomas E. Dickey:
  987.   http://www.clark.net/pub/dickey/xterm/xterm.faq.html
  988. UNIX C-Kermit's SET KEY command currently can not be used with keys that
  989. generate "wide" scan codes or multibyte sequences, such as workstation
  990. function or arrow keys, because UNIX C-Kermit does not have direct access to
  991. the keyboard.
  992. However, many UNIX workstations and/or console drivers provide their own key
  993. mapping feature.  With xterm, for example, you can use 'xmodmap' ("man
  994. xmodmap" for details); here is an xterm mapping to map the Sun keyboard to DEC
  995. VT200 values for use with VT-terminal oriented applications like VMS EVE:
  996.   keycode 101=KP_0
  997.   keycode 119=KP_1
  998.   keycode 120=KP_2
  999.   keycode 121=KP_3
  1000.   keycode 98=KP_4
  1001.   keycode 99=KP_5
  1002.   keycode 100=KP_6
  1003.   keycode 75=KP_7
  1004.   keycode 76=KP_8
  1005.   keycode 77=KP_9
  1006.   keycode 52=KP_F1
  1007.   keycode 53=KP_F2
  1008.   keycode 54=KP_F3
  1009.   keycode 57=KP_Decimal
  1010.   keycode 28=Left
  1011.   keycode 29=Right
  1012.   keycode 30=KP_Separator
  1013.   keycode 105=KP_F4
  1014.   keycode 78=KP_Subtract
  1015.   keycode 8=Left
  1016.   keycode 10=Right
  1017.   keycode 32=Up
  1018.   keycode 33=Down
  1019.   keycode 97=KP_Enter
  1020. Users of Linux consoles can use loadkeys ("man dumpkeys loadkeys keytables"
  1021. for details.  The format used by loadkeys is compatible with that used by
  1022. Xmodmap, although it is not definitely certain that the keycodes are
  1023. compatible for different keyboard types (e.g. Sun vs HP vs PC, etc).
  1024. (10) FILE TRANSFER
  1025. Suppose you start C-Kermit with a command-line argument to send or receive a
  1026. file (e.g. "kermit -r") and then type Ctrl-c immediately afterwards to escape
  1027. back and initiate the other end of the transfer, BUT your local Kermit's
  1028. escape character is not Ctrl-.  In this case, the local Kermit passes the
  1029. Ctrl- to the remote system, and if this is UNIX, Ctrl- is likely to be its
  1030. SIGQUIT character, which causes the current program to halt and dump core.
  1031. Well, just about the first thing C-Kermit does when it starts is to disable
  1032. the SIGQUIT signal.  However, it is still possible for SIGQUIT to cause Kermit
  1033. to quit and dump core if it is delivered while Kermit is being loaded or
  1034. started, before the signal can be disabled.  There's nothing Kermit itself can
  1035. do about this, but you can prevent it from happening by disabling SIGQUIT in
  1036. your UNIX session.  The command is usually something like:
  1037.   stty quit undef
  1038. UNIX C-Kermit does not reject incoming files on the basis of size.  There
  1039. appears to be no good (reliable, portable) way to determine in advance how
  1040. much disk space is available, either on the device, or (when quotas or other
  1041. limits are involved) to the user.
  1042. File transfer can fail if the incoming file is bigger than your "ulimit".
  1043. Use the UNIX ulimit command to examine or change your ulimit (the number is
  1044. in 512-byte blocks, i.e. 0.5K).  The exact effect of the ulimit depends on
  1045. the particular UNIX version, and to some extent probably also on the shell.
  1046. "man ulimit" for details, or read the man page for the shell you are using.
  1047. UNIX C-Kermit discards all carriage returns from incoming files when in text
  1048. mode.
  1049. If C-Kermit has problems creating files in writable directories when it is
  1050. installed setuid or setgid on BSD-based versions of UNIX such as NeXTSTEP 3.0,
  1051. it probably needs to be rebuilt with the -DSW_ACC_ID compilation switch (see
  1052. ckuins.txt).
  1053. If C-Kermit is receiving a file on a dialup connection and the connection
  1054. hangs up, the SIGHUP signal is delivered to the top-level shell, which kills
  1055. all processes (including Kermit and any of its subforks) and closes all open
  1056. files, including the file that was being received.  Even if you have told
  1057. Kermit to SET FILE INCOMPLETE DISCARD, the partially received file is kept.
  1058. See comments in ckutio.c (search for SIGHUP) for details.
  1059. If you SET FILE DISPLAY FULLSCREEN, and C-Kermit complains "Sorry, terminal
  1060. type not supported", it means that the terminal library (termcap or termlib)
  1061. that C-Kermit was built with does not know about a terminal whose name is the
  1062. current value of your TERM environment variable.  If this happens, but you
  1063. want to have the fullscreen file transfer display, EXIT from C-Kermit and set
  1064. a UNIX terminal type from among the supported values that is also supported by
  1065. your terminal emulator, or else have an entry for your terminal type added to
  1066. the system termcap and/or terminfo database.
  1067. If you attempt to suspend C-Kermit during local-mode file transfer and then
  1068. continue it in the background (via bg), it will block for "tty output" if
  1069. you are using the FULLSCREEN file transfer display.  This is apparently
  1070. a problem with curses.  Moving a local-mode file transfer back and forth
  1071. between foreground and background works correctly, however, with the SERIAL,
  1072. CRT, BRIEF, or NONE file transfer displays.
  1073. If C-Kermit's command parser no longer echoes, or otherwise acts strangely,
  1074. after returning from a file transfer with the fullscreen (curses) display, and
  1075. the curses library for your version of UNIX includes the newterm() function,
  1076. then try rebuilding your version of C-Kermit with -DCK_NEWTERM.  Similarly if
  1077. it echoes doubly, which might even happen during a subsequent CONNECT session.
  1078. If rebuilding with -DCK_NEWTERM doesn't fix it, then there is something very
  1079. strange about your system's curses library, and you should probably not use
  1080. it.  Tell C-Kermit to SET FILE DISPLAY CRT or anything else other than
  1081. FULLSCREEN, and/or rebuild without -DCK_CURSES, and without linking with
  1082. (termlib and) curses.  Note: In C-Kermit 7.0 this problem seems to have
  1083. escalated, and -DCK_NEWTERM had to be added to many builds that previously
  1084. worked without it: Linux, AIX 4.1, DG/UX, etc.  In the Linux case, it is
  1085. obviously because of changes in the (n)curses library; the cause in the other
  1086. cases is not known.
  1087. Reportedly, when using "MSEND *" from a 14-character filename UNIX system to
  1088. another system (e.g. BSD) that allows longer names, with SET FILE NAMES
  1089. LITERAL, any files with 14-character names will have a space added to the end
  1090. of the name on the receiving machine (this *should* be fixed in 6.0).
  1091. C-Kermit creates backup-file names (such as "oofa.txt.~1~") based on its
  1092. knowledge of the maximum filename length on the platform where it is running,
  1093. which is learned at compile time, based on MAXNAMLEN or equivalent symbols
  1094. from the system header files.  But suppose C-Kermit is receiving files on a
  1095. UNIX platform that supports long filenames, but the incoming files are being
  1096. stored on an NFS-mounted file system that supports only short names.  NFS maps
  1097. the external system to the local APIs, so C-Kermit has no way of knowing that
  1098. long names will be truncated.  Or that C-Kermit is running on a version of
  1099. UNIX that supports both long-name and short-name file systems simultaneously
  1100. (such as HP-UX 7.00).  This can cause unexpected behavior when creating backup
  1101. files, or worse.  For example, you are sending a group of files whose names
  1102. are differentiated only by characters past the point at which they would be
  1103. truncated, each file will overwrite the previous one upon arrival.
  1104. Optimum file transfer performance is a matter of tuning parameters like packet
  1105. length, window size, control-character unprefixing, and on serial connections,
  1106. ensuring there is an effective flow control method, preferably hardware (such
  1107. as RTS/CTS).
  1108. However, a fully-configured C-Kermit program can be slower than a minimally
  1109. configured one simply because of its size.  A command-line-only version that
  1110. is stripped of every conceivable feature not affecting file transfer (such as
  1111. "sunos41m" for the Sun or "dellsys5r4m" for Dell) can move files faster than a
  1112. full-featured one.  Thus, it might make sense to keep a minimal version
  1113. available as well as a full-featured one.  See the files ckuins.txt and
  1114. ckccfg.txt as well as the makefile for how to do this.
  1115. A fairly substantial reduction in size and a noticeable improvement in speed
  1116. can be obtained simply by rebuilding C-Kermit without the debugging feature:
  1117.   make <entryname> KFLAGS=-DNODEBUG
  1118. See ckccfg.txt for more detailed information about configuration.
  1119. (11) EXTERNAL FILE TRANSFER PROTOCOLS
  1120. UNIX C-Kermit can be used in conjunction with other communications software
  1121. in various ways.  C-Kermit can be invoked from another communications program
  1122. as an "external protocol", and C-Kermit can also invoke other communication
  1123. software to perform external protocols.
  1124. This sort of operation makes sense only when you are dialing out from your
  1125. UNIX system.  If the UNIX system is the one you have dialed in to, you don't
  1126. need any of these tricks.  Just run the desired software on your UNIX system
  1127. instead of Kermit.  When dialing out from a UNIX system, the difficulty is
  1128. getting two programs to share the same communication device in spite of the
  1129. UNIX UUCP lockfile mechanism, which would normally prevent any sharing, and
  1130. preventing the external protocol from closing (and therefore hanging up) the
  1131. device when it exits back to the program that invoked it.
  1132. (This section deleted; see "Using C-Kermit", 2nd Ed, Chapter 14.)
  1133. "pcomm" is a general-purpose terminal program that provides file transfer
  1134. capabilities itself (X- and YMODEM variations) and the ability to call on
  1135. external programs to do file transfers (ZMODEM and Kermit, for example).  You
  1136. can tell pcomm the command to send or receive a file with an external
  1137. protocol:
  1138. send receive
  1139. ZMODEM sz <filename> rz
  1140. Kermit kermit -s <filename> kermit -r
  1141. pcomm runs external programs for file transfer by making stdin and stdout
  1142. point to the modem port, and then exec-ing "/bin/sh -c xxx" (where xxx is the
  1143. appropriate command).  However, C-Kermit does not treat stdin and stdout as
  1144. the communication device unless you instruct it:
  1145. send receive
  1146. Kermit kermit -l 0 -s <filename> kermit -l 0 -r
  1147. The "-l 0" option means to use file descriptor 0 for the communication device.
  1148. In general, any program can pass any open file descriptor to C-Kermit for the
  1149. communication device in the "-l" command-line option.  When Kermit is given
  1150. a number as the argument to the "-l" option, it simply uses it as a file
  1151. descriptor, and it does not attempt to close it upon exit.
  1152. Here's another example, for Seyon (a Linux communication program).  First try
  1153. the technique above.  If that works, fine; otherwise...  If Seyon does not
  1154. give you a way to access and pass along the file descriptor, but it starts up
  1155. the Kermit program with its standard i/o redirected to its (Seyon's)
  1156. communications file descriptor, you can also experiment with the following
  1157. method, which worked here in brief tests on SunOS.  Instead of having Seyon
  1158. use "kermit -r" or "kermit -s filename" as its Kermit protocol commands, use
  1159. something like this (examples assume C-Kermit 6.0):
  1160.   For serial connections:
  1161.     kermit -YqQl 0 -r                     <-- to receive
  1162.     kermit -YqQl 0 -s filename(s)         <-- to send one or more files
  1163.   For Telnet connections:
  1164.     kermit -YqQF 0 -r                     <-- to receive
  1165.     kermit -YqQF 0 -s filename(s)         <-- to send one or more files
  1166. Command line options:
  1167.   Y    - skip executing the init file
  1168.   Q    - use fast file transfer settings
  1169.   l 0  - transfer files using file descriptor 0 for a serial connection
  1170.   F 0  - transfer files using file descriptor 0 for a Telnet connection
  1171.   q    - quiet - no messages
  1172.   r    - receive
  1173.   s    - send
  1174. (11.2) INVOKING EXTERNAL PROTOCOLS FROM C-KERMIT
  1175.    (This section is obsolete, but not totally useless.
  1176.     See Chapter 14 of "Using C-Kermit", 2nd Edition).
  1177. After you have opened a communication link with C-Kermit's SET LINE (SET PORT)
  1178. or SET HOST (TELNET) command, C-Kermit makes its file descriptor available to
  1179. you in the v(ttyfd) variable so you can make it available to other programs
  1180. that you RUN from C-Kermit.  Here, for example, C-Kermit runs itself as an
  1181. external protocol:
  1182.   C-Kermit>set modem type hayes
  1183.   C-Kermit>set line /dev/acu
  1184.   C-Kermit>set speed 2400
  1185.   C-Kermit>dial 7654321
  1186.    Call complete.
  1187.   C-Kermit>echo v(ttyfd)
  1188.    3
  1189.   C-Kermit>run kermit -l v(ttyfd)
  1190. Other programs that accept open file descriptors on the command line can be
  1191. started in the same way.
  1192. You can also use your shell's i/o redirection facilities to assign C-Kermit's
  1193. open file descriptor (ttyfd) to stdin or stdout.  For example, old versions of
  1194. the UNIX ZMODEM programs, sz and rz, when invoked as external protocols,
  1195. expect to find the communication device assigned to stdin and stdout with no
  1196. option for specifying any other file descriptor on the sz or rz command line.
  1197. However, you can still invoke sz and rz as exterior protocols from C-Kermit if
  1198. your current shell ($SHELL variable) is ksh (the Korn shell) or bash (the
  1199. Bourne-Again shell), which allows assignment of arbitrary file descriptors to
  1200. stdin and stdout:
  1201.   C-Kermit> run rz <&v(ttyfd) >&v(ttyfd)
  1202. or:
  1203.   C-Kermit> run sz oofa.zip <&v(ttyfd) >&v(ttyfd)
  1204. In version 5A(190) and later, you can use C-Kermit's REDIRECT command, if it
  1205. is available in your version of C-Kermit, to accomplish the same thing without
  1206. going through the shell:
  1207.   C-Kermit> redirect rz
  1208. or:
  1209.   C-Kermit> redirect sz oofa.zip
  1210. A complete set of rz,sz,rb,sb,rx,sx macros for UNIX C-Kermit is defined in
  1211. the file ckurzsz.ini.  It automatically chooses the best redirection method.
  1212. (11.3) USING C-KERMIT WITH TERM
  1213.   Note: the following section dates from circa 1994.  Since then,
  1214.   evidently, "slirp" has supplanted "term", and reportedly, unlike
  1215.   term, slirp can be used transparently to the application:
  1216.     http://blitzen.canberra.edu.au/resources
  1217. The "term" program provides an error-corrected, multiplexed connection
  1218. between two UNIX systems, allowing you to run multiple applications over a
  1219. single connection, for example several terminal windows and a file transfer
  1220. simultaneously.  Term depends on a communications application (such as
  1221. C-Kermit) to make the connection and then redirect it to term's standard i/o.
  1222. The advantages of using C-Kermit rather than other communication programs for
  1223. this include:
  1224.  . C-Kermit's script language lets you automate the entire process.
  1225.  . With C-Kermit's REDIRECT command, term sessions are not limited to serial
  1226.    connections, but can work over network connections (TCP/IP, X.25) too.
  1227. Here is an example showing how to set up a term session between two UNIX
  1228. systems with C-Kermit (assuming the connection has already been made by
  1229. C-Kermit, e.g. by dialing up):
  1230.   C-Kermit> connect
  1231.   login: xxx
  1232.   Password: xxx
  1233.   $ exec term -r -s 38400 -A
  1234.   ^c (escape back)
  1235.   C-Kermit>redirect term -s 38400 -A &
  1236.   C-Kermit>push  ; or "suspend"
  1237.   $
  1238. Now you can run term clients such as trsh and tupload at the local shell
  1239. prompt.
  1240. (12) SECURITY
  1241. We receive constant requests for versions of C-Kermit that use all sorts of
  1242. security mechanisms: SOCKS, SSL, SSH, SSLeay, TSL, PCT, SRP, etc etc.  Well...
  1243.  (a) C-Kermit can be linked with a SOCKS library if you have one; see
  1244.      ckccfg.txt, section 8.1.1.
  1245.  (b) Most of the others require export or import licenses, carry source-code
  1246.      restrictions, and/or are patented.
  1247. HOWEVER...
  1248.  (c) C-Kermit 7.0 includes support for Kerberos; see kerberos.txt for details.
  1249.  (d) It also has a new feature to let it be used "over" secure clients like
  1250.      SSL Telnet, SRP Telnet, etc.  See ckermit2.txt Sections 2.7 and 2.14
  1251.      for details.
  1252. (13) MISCELLANEOUS USER REPORTS
  1253. Date: Thu, 12 Mar 92 1:59:25 MEZ
  1254. From: Walter Mecky <walter@rent-a-guru.de>
  1255. Subject: Help.Unix.sw
  1256. To: svr4@pcsbst.pcs.com, source@usl.com
  1257. PRODUCT: Unix
  1258. RELEASE: Dell SVR4 V2.1 (is USL V3.0)
  1259. MACHINE: AT-386
  1260. PATHNAME: /usr/lib/libc.so.1
  1261. /usr/ccs/lib/libc.a
  1262. ABSTRACT: Function ttyname() does not close its file descriptor
  1263. DESCRIPTION:
  1264. ttyname(3C) opens /dev but never closes it. So if it is called
  1265. often enough the open(2) in ttyname() fails. Because the broken
  1266. ttyname() is in the shared lib too all programs using it can
  1267. fail if they call it often enough. One important program is
  1268. uucico which calls ttyname for every file it transfers.
  1269. Here is a little test program if your system has the bug:
  1270. #include <stdlib.h>
  1271. #include <stdio.h>
  1272. main() {
  1273.     int i = 0;
  1274.     while (ttyname(0) != NULL)
  1275.       i++;
  1276.     perror("ttyname");
  1277.     printf("i=%dn", i);
  1278. }
  1279. If this program runs longer than some seconds you don't have the bug.
  1280. WORKAROUND:
  1281. None
  1282. FIX:
  1283. Very easy if you have source code.
  1284. Another user reports some more explicit symptoms and recoveries:
  1285. > What happens is when invoking ckermit we get one of the following
  1286. > error messages:
  1287. >   You must set line
  1288. >   Not a tty
  1289. >   No more processes.
  1290. > One of the following three actions clears the peoblem:
  1291. >   shutdown -y -g0 -i6
  1292. >   kill -9 the ttymon with the highest PID
  1293. >   Invoke sysadm and disable then enable the line you want to use.
  1294. > Turning off respawn of sac -t 300 and going to getty's and uugetty's
  1295. > does not help.
  1296. >
  1297. > Also C-Kermit reports "?timed out closing /dev/ttyxx".
  1298. > If this happens all is well.
  1299. ------------------------------
  1300. (Note: the following problem also occurs on SGI and probably many other
  1301. UNIX systems):
  1302. From: James Spath <spath@jhunix.hcf.jhu.edu>
  1303. To: Info-Kermit-Request@cunixf.cc.columbia.edu
  1304. Date: Wed, 9 Sep 1992 20:20:28 -0400
  1305. Subject: C-Kermit vs uugetty (or init) on Sperry 5000
  1306. We have successfully compiled the above release on a Unisys/Sperry 5000/95.  We
  1307. used the sys5r3 option, rather than sys5r2 since we have VR3 running on our
  1308. system.  In order to allow dialout access to non-superusers, we had to do
  1309. "chmod 666 /dev/tty###", where it had been -rw--w--w- (owned by uucp), and to
  1310. do "chmod +w /usr/spool/locks".  We have done text and binary file transfers
  1311. through local and remote connections.
  1312. The problem concerning uucp ownership and permissions is worse than I thought
  1313. at first.  Apparently init or uugetty changes the file permissions after each
  1314. session.  So I wrote the following C program to open a set of requested tty
  1315. lines.  I run this for any required outgoing line prior to a Kermit session.
  1316.    ------ cut here -------
  1317. /* opentty.c -- force allow read on tty lines for modem i/o */
  1318. /* idea from: restrict.c -- System 5 Admin book Thomas/Farrow p. 605 */
  1319. /* /jes jim spath {spath@jhunix.hcj.jhu.edu } */
  1320. /* 08-Sep-92 NO COPYRIGHT. */
  1321. /* this must be suid to open other tty lines */
  1322. /* #define DEBUG */
  1323. #define TTY "/dev/tty"
  1324. #define LOK "/usr/spool/locks/LCK..tty"
  1325. #include <stdio.h>
  1326. /* allowable lines: */
  1327. #define TOTAL_LINES 3
  1328. static char allowable[TOTAL_LINES][4] = { "200", "201", "300" };
  1329. static int total=TOTAL_LINES;
  1330. int allow;
  1331. /* states: */
  1332. #define TTY_UNDEF 0
  1333. #define TTY_LOCK  1
  1334. #define TTY_OKAY  2
  1335. main(argc, argv)
  1336. int argc; char *argv[]; {
  1337.     char device[512];
  1338.     char lockdev[512];
  1339.     int i;
  1340.     if (argc == 1) {
  1341. fprintf(stderr, "usage: open 200 [...]n");
  1342.     }
  1343.     while (--argc > 0 && (*++argv) != NULL ) {
  1344. #ifdef DEBUG
  1345. fprintf(stderr, "TRYING: %s%sn", TTY, *argv);
  1346. #endif
  1347. sprintf(device, "%s%s", TTY, *argv);
  1348. sprintf(lockdev, "%s%s", LOK, *argv);
  1349. allow = TTY_UNDEF; i = 0;
  1350. while (i <= total) { /* look at all defined lines */
  1351. #ifdef DEBUG
  1352.     fprintf(stderr, "LOCKFILE? %s?n", lockdev);
  1353. #endif
  1354.     if (access(lockdev, 00) == 0) {
  1355. allow=TTY_LOCK;
  1356. break;
  1357.     }
  1358. #ifdef DEBUG
  1359.     fprintf(stderr, "DOES:%s==%s?n", allowable[i], *argv);
  1360. #endif
  1361.     if (strcmp(allowable[i], *argv) == 0)
  1362.       allow=TTY_OKAY;
  1363.     i++;
  1364. }
  1365. #ifdef DEBUG
  1366. fprintf(stderr, "allow=%dn", allow);
  1367. #endif
  1368. switch (allow) {
  1369.   case TTY_UNDEF:
  1370.     fprintf (stderr, "open: not allowed on %sn", *argv);
  1371.     break;
  1372.   case TTY_LOCK:
  1373.     fprintf (stderr, "open: device locked: %sn", lockdev);
  1374.     break;
  1375.   case TTY_OKAY:
  1376.     /* attempt to change mode on device */
  1377.     if (chmod (device, 00666) < 0)
  1378.       fprintf (stderr, "open: cannot chmod on %sn", device);
  1379.     break;
  1380.   default:
  1381.     fprintf (stderr, "open: FAULTn");
  1382. }
  1383.     }
  1384.     exit (0);
  1385. }
  1386. ------------------------------
  1387. (14) THIRD-PARTY DRIVERS
  1388. UNIX versions, especially those for PCs (SCO, Unixware, etc) might be
  1389. augmented by third-party communication-board drivers from Digiboard, Stallion,
  1390. etc.  These can sometimes complicate matters for Kermit considerably since
  1391. Kermit has no way of knowing that it is going through a possibly nonstandard
  1392. driver.  Various examples are listed in the earlier sections of this file;
  1393. search for Stallion, Digiboard, etc.  Additionally:
  1394.  . The Stallion Technologies EasyConnection serial board driver does not
  1395.    always report the state of DSR as low.  From Stallion (October 1997):
  1396.    "Unfortunately, this is a bug in our driver. We have implemented all of the
  1397.    other TIOMC functions, eg DTR, DCD, RTS and CTS, but not DSR. Our driver
  1398.    should report the actual state of DSR on those of our cards that have a DSR
  1399.    signal. That the driver always reports DSR as not asserted (0), is a bug in
  1400.    the driver. The driver should be either reporting the state of DSR
  1401.    correctly on those cards that support DSR or as always asserted (1) on
  1402.    those cards that do not have a DSR signal. This will be fixed in a future
  1403.    version of our drivers; at this time I cannot say when this will be."  And
  1404.    later, "As far as I can tell, we don't support the termios/termiox ioctls
  1405.    that relate specifically to DSR and RI; all the rest are supported.  This
  1406.    will, as I mentioned earlier, be fixed in the next release of our ATA
  1407.    software."  - World Wide Escalation Support, Stallion Technologies,
  1408.    Toowong QLD, support@stallion.oz.au.
  1409. Later (December 1997, from the same source):
  1410.  . We have now released a new version of the ATA software, version 5.4.0.
  1411.    This version fixes the problem with the states of the DSR and RI
  1412.    signals and how they were being reported by the driver. This is the
  1413.    problem that you reported in October. The DSR signal is reported
  1414.    correctly on those cards that support the DSR signal, such as the early
  1415.    revision of the EasyIO card and the EasyConnection 8D4 panel, and as
  1416.    always asserted on those cards that do not support the DSR signal in
  1417.    the hardware.   The new driver is available from our Web site,
  1418.    www.stallion.com, in the  /drivers/ata5/UnixWare directory.
  1419. (End of CKUBWR.TXT)