CKOKER.BWR "Beware File" for C-Kermit Version 5A -*- text -*- OS/2 VERSION Applies to version 5A(190) BETA.16 Last update: Fri Sep 2 14:18:18 1994 Authors: Frank da Cruz and Christine M. Gianone, Columbia University, New York. Kai Uwe Rommel, ARS Computing & Consulting GmbH, Muenchen, Germany. Jeffrey Altman, Altmania Productions, Great Neck, New York. Copyright (C) 1985, 1994, Trustees of Columbia University in the City of New York. The C-Kermit software may not be, in whole or in part, licensed or sold for profit as a software product itself, nor may it be included in or distributed with commercial products or otherwise distributed by commercial concerns to their clients or customers without written permission of the Office of Kermit Development and Distribution, Columbia University. This copyright notice must not be removed, altered, or obscured. Report problems, suggestions, fixes, etc, to Frank da Cruz: Internet: fdc@columbia.edu BITNET/EARN/CREN: FDCCU@CUVMA Columbia University Academic Information Systems 612 West 115th Street, New York, NY 10025 USA DOCUMENTATION C-Kermit 5A is documented in the book "Using C-Kermit" by Frank da Cruz and Christine M. Gianone, 1993, Digital Press / Butterworth-Heinemann, Woburn, MA, USA, ISBN 1-55558-108-0. Price: US $34.95. Available in book and computer stores, or order by phone, call Columbia University at +1 212 854-3703, or Butterworth-Heinemann at +1 800 366-2665. A German edition is available from Verlag Heinz Heise in Hannover, Germany. UPDATE: C-KERMIT EDITS AFTER 188 As of version 5A(189), OS/2 C-Kermit supports TCP/IP connections if you have IBM TCP/IP 1.2.1 or 2.0 (or compatible products such as the one from Essex Systems) installed on your OS/2 system. This requires a change in the installation instructions. A new automatic installation procedure is now included, a Rexx program called INSTALL.CMD. Just put the installation diskette into drive A:, click on the Drive A: icon, then click on INSTALL.CMD. Or from the OS/2 CMD prompt, type "a:install" (of course, you can also use Drive B). To bypass the INSTALL procedure and install OS/2 C-Kermit manually, please read the installation instructions in the OS/2 Appendix of "Using C-Kermit" together with any updates in the READ.ME (CKOAAA.DSK) file. Edit 190 adds ANSI and VT220 terminal emulation, Named Pipe and NETBIOS communications, a REXX programming interface, an "autodownload" (APC) feature, file transfer failure recovery, mouse support, and a completely new method of key mapping using "\Kverbs" (like MS-DOS Kermit). For details about the new features of OS/2 C-Kermit since edit 188, please read the file CKCKER.UPD, especially the OS/2 section. THE 16-BIT AND 32-BIT VERSIONS OS/2 C-Kermit comes in both a 16-bit version, which works under both OS/2 1.x and 2.0 (and later), and in a 32-bit version, which works only under OS/2 2.0 and later. The program herald and the SHOW FEATURES command tell you which version you have. The 16-bit version might run out of stack space and crash under certain conditions (the OS/2 message will be "Stack Overflow"). This is a limitation of the underlying 16-bit architecture. Also the 16-bit version lacks various features of the 32-bit version due to architectural or compiler limitations: various printer operations, the Rexx interface, SET FILE TYPE LABELED (OS/2 Extended Attribute) support, mouse support, Named Pipe support, NETBIOS, etc. The 32-bit version does not (should not) crash, but it can't be used under OS/2 1.x. It is recommended that all users choose to install the 32-bit version unless they are running a 1.x version of OS/2 (or are running on Windows NT.) NETWORK SUPPORT OS/2 C-Kermit includes support for TCP/IP, DECNET LAT, NETBIOS, and Named Pipes. Named-Pipe support should work for everybody, since this is a standard feature of OS/2. The others require the corresponding networking product to be installed; Kermit will search for these products automatically upon startup. NETBIOS and Named Pipe support are available only in the 32-bit version of C-Kermit. The SET HOST command uses your current SET NETWORK type. For example: SET NETWORK DECNET SET HOST OOFA will try to make a DECnet (PATHWORKS) LAT connection to DECnet node OOFA. However, please be aware that a SET NETWORK command will fail if the given type of network is not installed, or if (in the case of NETBIOS) the given name is already in use. Thus a safer construction would be: SET NETWORK NETBIOS OOFA IF FAIL STOP 1 Can't access NETBIOS network SET HOST MUPEEN IF FAIL STOP 1 Can't make NETBIOS connection The default network type (which is used if give a SET HOST command without first giving a SET NETWORK command) depends on which network products you have installed on your OS/2 system, chosen in this order of preference: TCP/IP, DECnet, Named Pipes NetBIOS cannot be a default choice because it requires a user-assigned name. TCP/IP: C-Kermit's TCP/IP support works with: . IBM TCP/IP (both the 1.2.1 16-bit DLL and the 2.0 32-bit DLL) . Essex Systems TCP/2 (both the 16-bit and 32-bit DLLs) . FTP Software's PC/TCP for OS/2 It is not known whether it works with Novell LAN Workplace for OS/2, Wollongong, or others. If a TCP/IP package includes an IBM-compatible TCPIPDLL.DLL library, then C-Kermit should work with it. Support for other OS/2 TCP/IP packages is planned and will be implemented as time permits and development toolkits are available to us. (End TCP/IP Section) DECNET: DECnet LAT support works in conjunction with DEC's PATHWORKS for OS/2 product, which must be installed. To use it: SET NETWORK DECNET SET HOST C-Kermit then tries to load LATCALLS.DLL, which must be in your LIBPATH. (End DECNet Section) NETBIOS: NetBios is the preferred protcol to use when transfering files with MS-DOS Kermit or C-Kermit for OS/2 in a peer-to-peer local area network. NetBios is supported over most networking protocols including: Netbeui, IPX, IP, and LU6.2. In addition, it has lower overhead than all other OS/2 implemented networking protocols. Both Kermit Server and Chat modes are supported. "Chat mode" means that both Kermit programs are in CONNECT mode, so two users can "chat" with each other by typing. For chat mode, use: set terminal echo local set terminal cr-display crlf connect C-Kermit supports both the original NETBIOS 3.0 (NETAPI) interface and the newer NETBIOS 4.0 (ACSBNET) interface. C-Kermit has been tested with the following products: New NETBIOS 4.0 interface (ACSNETB.DLL): IBM LAN Adapter and Protocol Support (LAPS) as found in: IBM Network Transport Services/2 IBM LAN Distance IBM Communication Manager/2 IBM LAN Server 3.x IBM LAN Requester 3.x Old NETBIOS 3.0 interface (NETAPI.DLL): Microsoft LAN Manager Requester IBM Extended Services 1.x IBM LAN Server 2.x Requester Novell Netware 2.x Requester Commands: SET NETWORK NETBIOS SET HOST { *, } Each C-Kermit session requires the following resources from the NetBios provider: 1 Name, 32 Commands, and 1 session. For example, if you wish to have three C-Kermit sessions running simultaneously in Server mode, NetBios must be configured to support at least 3 Names, 96 Commands, and 3 sessions. If the number of available NetBios commands is inadequate for C-Kermit's needs, a C-Kermit in Send or Server modes will quickly timeout. In this situation, reduce the number of window slots used with C-Kermit's SET WINDOW command. In general, there is little benefit on a local area network of using more than 2 window slots. The default settings for some NetBios providers are: Config File Names Commands Sessions Novell NET.CFG 24 32 16 LAPS PROTOCOL.INI 21 95 5 The method for modifying NetBios resources depends on the NetBios product; it is normally done by executing the configuration program (LAPS, INSTALL, ...) or by manually modifying the configuration files and restarting the network (or the OS/2 system). It is possible to have two or more products each providing NetBios services. However, there are limitations. All products which use LAPS may be mixed together. And LAPS may be mixed with up to one product which uses the NETAPI.DLL product. In particular, you can not successfully run Novell NetBios support with IBM Extended Services. The most common combination is LAPS and Novell NetBios. In this situation, you need to specify the NetBios configuration settings in both Net.Cfg and Protocol.Ini. And the settings for Names, Commands, and Sessions *must* match. You must also add the following section to the PROTOCOL.INI file: [NETBIOS] DriverName=NetBios$ ADAPTER0=ipxnb$,,,, ADAPTER1=netbeui$,,,, where: is almost always 0 since there is usually only one adapter in the machine. , , and must match the settings in NET.CFG and PROTOCOL.INI. Without this additional section in PROTOCOL.INI, you can use only IBM's NETBIOS implementation. With this section, Novell's NetBIOS implementation is used by default since it must be ADAPTER0; to use IBM's NETBIOS on a system that has both Novell and IBM, start C-Kermit with the command-line option: -N for example "ckermit -N 1" (note, uppercase N). (End NetBios Section) NAMED PIPES: C-Kermit supports OS/2 Named Pipes across networks when a LAN requester has been installed. C-Kermit has been tested with the following products: IBM LAN Server Requester to LAN Server Network Server Microsoft LAN Manager Requester to LAN Manager Network Server Novell Netware Requester to Novell Netware Requester Commands: SET NETWORK NAMED-PIPE SET HOST { *, } Both Kermit Server and Chat modes are supported. Note: when using Named Pipes with LAN Server or LAN Manager, only the machine which has the Network Server software is capable of successfully using the SET HOST * command. This is because the client network requesters do not implement the server side of the named-pipe network redirection. Novell Netware Requester for OS/2, on the other hand, implements both the named-pipes client and server code on the client workstation and does not require the existence of a Network server to operate. (End Named Pipes Section) GENERAL LIMITATIONS AND PROBLEMS When switching away from C-Kermit's terminal screen and then switching back to it, certain video items might become confused: . The cursor might be lost or misplaced . The entire screen might be blinking (more about this below) . The screen border might have disappeared . Colors might have changed These problems appear to be confined only to certain systems, and do not occur on others. It is believed that they are related to the particular video adapter or driver; the problems are most commonly reported on SVGA and XGA systems. You can usually work around these problems in various ways: . Use Alt-R to reset the terminal emulator . Escape back to the prompt and CONNECT again . Escape back to the prompt, PUSH, EXIT, and CONNECT again . Escape back to the prompt, run MODE CO80 (or whatever), and CONNECT again C-Kermit has been reported to "freeze" on some systems. This problem is not confined to C-Kermit, and has also been observed with a variety of other communications software packages: . The most likely cause for freezing would be an interrupt conflict. Make sure your serial ports, CD ROM drive / controller and/or SCSI adapter, Soundblaster, ISA card, network adapter, etc, are all using different and unique IRQs. . One user reported that the problem disappeared when he moved his serial communication board farther away from his SCSI adapter board. This might have reduced electromagnetic interference, or altered the priority of the adapters. Sometimes, simply reseating the card can help. . Another user (different system) made the problem go away by rebooting the PC, which had been up for many weeks. . The problem might be caused by a poorly built or configured system: noisy bus, spurious interrupts, buggy internal modems, or buggy serial port driver software. For example, one user who noted that Kermit froze whenever he told it to SET PORT COM2 also discovered that the same thing would happen if he issued a MODE COM2 command at the CMD prompt, even when this is done immediately after starting the system. . Finally, mysterious problems like this are often cleared up by installing patches (CSDs) or new releases of the software involved (e.g. TCP/IP or other DLLs, serial drivers, OS/2 itself, etc). SET TERMINAL CODE PAGE only seems to work in fullscreen sessions. For that matter, the same seems to be true of OS/2's own CHCP program, so this is apparently an OS/2 limitation (noted in OS/2 2.1 GA). SET TERMINAL CODE PAGE (and OS/2's own CHCP program) seem to have no effect at all when the Hebrew NLV is installed. The code page simply does not change. Q: Is it possible to quit Kermit and NOT have the phone line hung up? That is, quit out of Kermit leaving the modem connection open, so I can then start SLIP? A: No. When an OS/2 process exits, all of its file handles are closed. One of the penalties we pay for using a real operating system, as opposed to (say) DOS. It might be possible to run the SLIP process "under" Kermit. It is also possible for Kermit to inherit the file descriptor of a serial device from a superior process, in which case it is not closed when Kermit exits. Q: Does C-Kermit support multiple sessions? A: No. If you SET PORT 1 and make a connection, and escape back and SET PORT 2, the connection on port 1 is closed, dropped, and hung up. The same happens for network sessions. To achieve multiple C-Kermit sessions, run separate copies in different OS/2 windows. As of edit 190, C-Kermit will put a unique identifier in the window list for each session, such as "C-Kermit COM1", "C-Kermit COM2", "C-Kermit KERMIT.COLUMBIA.EDU", etc. If you have TCP/IP installed on your OS/2 system, you can set up a SLIP connection, and then you can run multiple copies of C-Kermit over it, using C-Kermit's TELNET command to make the connections. This lets you achieve multiple sessions over a single serial port, a single modem, and a single phone call. C-Kermit's performance on serial connections -- and the performance of any other OS/2 communication software program -- can be improved significantly by using a 16550A(FN) communications port controller (UART) rather than an 8250, 16450, 16550 (no A), or other unbuffered UART. Unbuffered UARTs interrupt the CPU once per character, whereas a buffered UART interrupts every 8-14 (or more) characters. Measurements during C-Kermit file transfer on an otherwise unloaded i486/50 EISA system under OS/2 2.0 show approximately 10%-25% CPU usage with a buffered UART and 75%-100% using an unbuffered one. And of course, as with all other OS/2 applications (and OS/2 itself), a faster CPU and more memory also help. In any case, native OS/2 serial communications software is NOT as fast as DOS communications software (particularly MS-DOS Kermit) under DOS on the same machine because OS/2 communications must go the serial device driver, which adds the overhead of context switching; preservation of registers, stack adjustment, call gate, etc, whereas DOS applications can access the bare hardware directly. On the other hand, differences in speed of file transfers between native DOS and OS/2 programs should be marginal or even non-existent for current widely-used high-speed modems and CPU speeds. In addition, the fact that all communication must be done through a device driver ensures device independence (as long as the driver's programming interface is compatible to the standard COM.SYS) and efficient use of the system resources, because all known OS/2 communications device drivers are interrupt-driven, while many DOS communications software packages (other than MS-DOS Kermit) might not be. The OS/2 device driver also allows multiple file transfers on one machine at the same time (if multiple modems are connected to it, for example), and allows other (even very CPU-intensive) tasks to run concurrently without affecting the file transfer speed(s), as long as enough CPU power is available. If you refer to a disk drive that is not ready, or to a file on such a disk drive, the OS/2 critical error handler might pop up and require action from the keyboard. This occurs during execution of commands by inferior processes, such as DIRECTORY, REMOTE DIRECTORY, DELETE, REMOTE DELETE, etc. It should not occur in file transfer operations. The "hard error box" will put a halt to unattended, scripted operations, and it stops the operation of the OS/2 C-Kermit server if there is no human in attendance. To work around: add the line "AUTOFAIL=YES" to CONFIG.SYS and reboot. This eliminates the hard error box, but it applies system-wide, not just to C-Kermit. (The equivalent of AUTOFAIL=YES can be set on a per-process basis and C-Kermit does so for itself but it can't do this for any inferior processes started by it.) If the PUSH command, and related commands, do not work for you, check the definition of your OS/2 COMSPEC environment variable, i.e. make sure it contains the fully-specified pathname of a valid OS/2 executable shell program (such as C:\OS2\CMD.EXE), and/or the named program is in your OS/2 PATH. C-Kermit works with JP Software's 4OS2.EXE and any other replacement Command Shell. The directory containing the shell must be located in the PATH in order for the replacement shell to be called correctly. TYPING AND CUTTING AND PASTING When you are typing normal characters in CONNECT mode, C-Kermit should normally have no trouble transmitting them. An exception occurs on dialed serial connections with RTS/CTS flow control when the modem might drop its CTS (Clear To Send) signal because of noise on the connection that causes the two modems to enter a "retraining" sequence. If you type a character under these conditions, C-Kermit will write "TRANSMISSION BLOCKED 15" in the status line, and then will attempt to retransmit the character every 100 milliseconds for up to 15 seconds (the "15" is a countdown timer). If the countdown timer expires, C-Kermit returns to the prompt with a message like: Serial port blocked Tx waiting for CTS to be turned ON (the second line will tell you the reason for the blockage). Fifteen seconds is usually long enough for modems to retrain, but you can increase (or diminish) the retransmission timeout interval using the command: SET TERMINAL TRANSMIT-TIMEOUT You can put the transmit timer on hold by typing or holding down certain keys, such as the Alt key. You can also escape back to the prompt while the BLOCKED message is visible, but other "hot key" functions are disabled. Note that the BLOCKED message might not appear right away -- depending on the buffering capabilities of the UART and the configuration of the OS/2 communication port driver, a transmission error might not be reported back to C-Kermit by OS/2 until the second or later blocked character. When you type a function or arrow key (which sends a multi-character escape sequence), or a key that has been defined (via SET KEY) to send a string of characters, or when you paste into the terminal window, C-Kermit perceives "keyboard" characters arriving at a much faster rate than if they were coming from normal keystrokes, and attempts to transmit them as fast as they arrive. This might cause buffer overruns in the serial device, particularly if it is a nonbuffered UART. Here again, you might see the TRANSMISSION BLOCKED message. Kermit has no way of telling the difference between keystrokes and pasted-in material, so transmission blockages can sometimes be a problem when pasting. If this happens to you, you can force a pause between ALL characters sent by C-Kermit during CONNECT mode by giving the command: SET TERMINAL OUTPUT-PACING Try values like 20, 50, 100, etc; use the lowest one that makes the problem go away. Copying from a VIEW screen (e.g. OS/2 help text) and pasting into a Kermit (or any other Windowed program) does not work, due to a bug in OS/2. Workaround: paste into any PM editor (ie.,E or EPM) and then cut from there and paste into the C-Kermit session. PRINTER SUPPORT The good news: . The PRINT command works (if you have a printer). . SET PRINTER filename allows transparent-print material to be redirected to the specified file or device (32-bit version only). . Files can be transferred to PRN in the 32-bit version only. . LOG SESSION PRN works in the 32-bit version. . The Print-Screen key prints the current terminal emulation screen in the 32-bit version. If C-Kermit runs in a fullscreen session, Print-Screen prints a text copy of the display while if C-Kermit runs in a PM window, a graphical copy of the whole PM screen is printed (if your printer is capable of that). This is an OS/2 feature, having nothing to do with C-Kermit. . There is also a Print-Screen/Dump-Screen feature built into C-Kermit 5A(190) and later, that follows the SET PRINTER setting, for both the 16- and 32-bit versions, and works with both the current screen and with rolled-back screens. This feature is activated by the CONNECT-mode escape character, normally Ctrl-], followed by the letter F. It is also accomplished by the keyboard verbs, \Kdump or \KprtScn, which can be assigned to any key. . The keyboard verb, \KprintFF, sends a formeed to the printer. Most printers eject the current page upon receipt of a formfeed. Like all keyboard verbs, it can be assigned to any key or key combination. . Host initiated "print current cursor line" and "print current screen" are supported in the 32-bit version as of version 5A(190). . Host-initiated transparent print operations work correctly in the 32-bit version. . As of version 5A(190), VT52 printer functions are also supported. The bad news: . All host-initiated print operations are presently ignored by the 16-bit version (because if they are not ignored, they cause a stack overflow). . All host-initiated autoprint requests are treated like transparent print requests. . Print operations, when attempted on an OS/2 system that has no printer installed, might hang the Kermit program. To avoid this, use SET PRINTER to direct print data to a file or to the NUL device if you don't have a printer. OS/2 C-KERMIT WISH LIST . Regular OS/2-style graphical user interface (*). . True 80/132-column mode switching (*). . True, rather than simulated, double-width, double-height lines (*). . True, rather than simulated, underline and blink attributes (*). . Tektronix and other graphics terminal emulations (*). . Ability to execute VX-REXX programs (*). . 132-column mode via horizontal scrolling. . LK250/LK450 keyboard support. . Improved VT-220 emulation, including character set designation and invocation via ISO 4873 and 2022 rules. . User-controllable beep pitch and duration. . Support for non-IBM-compatible TCP/IP packages (e.g. Novell LWOS/2). . Ability to run in remote mode on both serial (OS2YOU) and network (TELNET) connections. Items marked with (*) require conversion of C-Kermit from a VIO to a PM application, which will make it a much bigger and slower program. COMMUNICATIONS AND DIALING Q: I tried to CONNECT to my modem and C-Kermit popped back to the prompt right away, saying "No carrier detected". A: C-Kermit's default handling of carrier is to not require it during DIALing, but to require it at other times. If you CONNECT to a modem before you have a dialed connection, there is no carrier signal, so i/o operations fail. If you need to CONNECT to a serial device that does not present the carrier signal (for example, to dial a modem "manually"), first tell C-Kermit to SET CARRIER OFF. Unless you have a very fast machine (say, 25 MHz or higher), OS/2 and its serial port drivers are not fast enough to keep up with serial input at 19200 bps or higher unless you have configured your connection for the optimum type of flow control, preferably RTS/CTS. Symptoms of lost data include fractured terminal screens during CONNECT and packet retransmissions during file transfer. High-speed communication works well if RTS/CTS is effective, but the overall throughput is limited by your PC's CPU speed (and how busy OS/2 is with other concurrent processes). OS/2 C-Kermit always uses 1 start bit and 1 stop bit. If Kermit's parity setting is NONE, it uses 8 data bits, otherwise it uses 7 data bits and one parity bit. Kermit controls parity itself, so you don't have to use the MODE command for this. SET LINE and SET PORT are synonyms, they do exactly the same thing: select the communication device. The syntax is the same for both: SET LINE [ ] SET PORT [ ] If you omit the device name, C-Kermit reverts to its default communications device, COM1. If you include a device name: 1. If the device name is a single digit, 1 through 8, C-Kermit converts this digit to the corresponding COM port name, COM1 through COM8. For example, "set port 2" is converted to "set port com2". 2. If the device name begins with an underscore character (_), and all of the following characters are numeric (for example, _12), the number is assumed to be a file descriptor for an already-open communication device (more about this below). If the device name begins with an underscore, but any non-numeric characters follow, a syntax error results. 3. Any other sequence of characters (including "COM1", etc) is accepted literally as a device name. This includes Universal Naming Convention (UNC) designations such as "\\server\modem" (which, due to Kermit's use of the backslash character as command-escape, must be entered as "\\\\server\\modem" or "//server/modem"). In cases (1) and (3), C-Kermit attempts to open the device, and then, if successful, checks to see whether it is a real communications device. If not, the SET LINE / SET PORT command fails. In case (2) (see below), no checking is done. NOTE: You can also pass an open file descriptor to C-Kermit on the command line, e.g. "ckermit -l 4". See the sample program in CKOEXP.DOC. Unless you use the MODE command to change it, the OS/2 serial port device driver requires the DSR and CTS signals to be asserted by the device (e.g. modem) it is connected to. If the device not provide these signals, C-Kermit will not be able to communicate. This is a feature of the OS/2 serial communications driver. In such cases, you can enable communication by telling the driver not to require them before starting C-Kermit (or in your CKERMIT.CMD file). For example: MODE COM2 IDSR=OFF,ODSR=OFF,OCTS=OFF If you have problems using COM3, COM4, or higher, specify the address and interrupt number (IRQ) in your OS/2 CONFIG.SYS file, in the line that starts the serial communication driver, COM.SYS (or SIO.SYS): DEVICE=C:\OS2\COM.SYS (number,base-address,irq) ... This example gives the addresses and IRQs for COM3 and COM4 but leaves the values for COM1 and COM2 alone: DEVICE=C:\OS2\COM.SYS (3,3E8,10) (4,2E8,15) and this example gives values for COM1 through COM4: DEVICE=C:\OS2\COM.SYS (1,3F8,4) (2,2F8,3) (3,3E8,10) (4,2E8,15) WARNING: the addresses and IRQs for COM3 and COM4 are not standardized, and can vary depending on the design and configuration of your communication board or internal modem. Consult the documentation that came with your device. Make sure you don't have multiple devices using the same IRQ. ANOTHER WARNING: SIO.SYS is a shareware replacement for COM.SYS with more flexible options for setting up access to ports and how they are simulated to DOS sessions. Performance of SIO.SYS and the standard COM.SYS on buffered 16550A ports can be considered roughly equal for OS/2 applications. SIO.SYS is not needed for C-Kermit, since C-Kermit is a native OS/2 application. However, SIO.SYS does provide support for extended buffered serial I/O boards such as the Hayes ESP which provide a 1024 character hardware buffer and extremely fast DMA transfer rates. If you have problems with serial communications -- screen freezing, lost characters, delayed echoing of characters, etc -- and you are using an early revision of SIO.SYS, try putting back the regular OS/2 communications port driver, COM.SYS. One user reports that these symptoms occur with any OS/2 communications program (such as PM Terminal), and are fixed for all such applications by replacing SIO.SYS with COM.SYS. This depends on the version of SIO.SYS in use, because some early revisions of it had problems with flow control. As of this writing, the current revision is 1.30. If you are unable to communicate at all on a serial connection, one possible reason might be that you have SET FLOW RTS/CTS (which is the default), but the serial device is not receiving the CTS signal. This can happen even if you have give a prior MODE COMx OCTS=OFF command. Try SET FLOW NONE. If that doesn't work, try rebooting your PC to reset the communications device driver. KEY ASSIGNMENTS The default key assignments are for a VT100 / VT102 terminal, as listed in "Using C-Kermit", Table V-3, page 430. DEC PF1-4 to PC F1-4. DEC keypad 0-9 to Alt-0 thru Alt-9, top rank, and so on. If you want to assign these functions to the PC's numeric keypad instead, simply TAKE CKOVTK2.INI. CKOVTK2.INI creates bindings for all DEC VT220/320 (LK201) keys to PC keys during terminal emulation. For further information, read the CKOVTK2.INI file itself. Note that the numeric keypad is in Numeric Mode by default, even after you TAKE CKOVTK2.INI -- this is normal, and follows the default for real DEC terminals. The host application software is (or should be) responsible for putting the keypad in the appropriate mode -- Numeric or Appplication. Should the software fail to do this, and assume the wrong mode for your keypad, then use the C-Kermit command SET TERMINAL KEYPAD { APPLICATION, NUMERIC } to correct the situation. SET KEY works with the Num Lock key, but several cautions are necessary: 1. Num Lock has two different scan codes: \510 and \766. 2. Every time you push Num Lock, the scan code toggles. 3. Every time you push Num Lock, the keypad state toggles. Assigning characters to Num Lock with SET KEY does not change this behavior. Thus, if you want the keypad keys to always send the same codes, no matter what the Num Lock state is, you must include two SET KEY commands for each key. This is done by CKOVTK2.INI. Key scan codes are not all the same as in MS-DOS Kermit. Most ordinary keys have the same codes, but not as many key combinations are differentiated. All combinations of Ctrl, Shift, and Alt with a particular key do not necessarily produce unique scan codes. TERMINAL EMULATION Frequently asked questions: Q: When I run C-Kermit with VT220 emulation to access either the DEC EVE (EDIT/TPU) editor or DEC VAX Notes, the screen is filled with gibberish like: m0lJ3l24rl6l7l8h;2'z;3'{4;H'z;H;H. A: Either tell C-Kermit to SET TERMINAL BYTESIZE 8 or tell VMS to SET TERMINAL /NOEIGHT. Q: How do I get Kermit to simulate all the functions of a DEC VT220 keyboard, including arrow keys, numeric keypad, Gold key, PF keys, F keys, etc? A: TAKE the CKOVTK2.INI file that is distributed with C-Kermit. Read this file to find out which PC key is mapped to which DEC key. If you don't like the mapping, edit this file to suit your taste. If you always want these mappings in effect, put the command "take c:\ckermit\ckovtk2.ini" in your CKERMOD.INI file (assuming you have installed C-Kermit in the C:\CKERMIT directory). Q: Key mapping does not work as described in Appendix V of "Using C-Kermit". A: That's right. In version 5A(190) and later it works just like in MS-DOS Kermit, using \Kverbs that can be assigned to any key. See the OS/2 section of CKCKER.UPD for a complete description of the new key mapping method, and all the other improvements in OS/2 C-Kermit since 5A(188). Or read the material about key mapping in "Using MS-DOS Kermit". Q: Screen rollback doesn't work the way it used to in versions 189 and earlier. I liked it better the old way! A: As of edit 190, there are two options for screen scrolling: SET TERMINAL ROLL OFF (the default, and the new way) and SET TERMINAL ROLL ON (the old way). The new way allows you to carry on a dialog with the host while in a rolled-back screen, which is handy when you need to refer to text that has scrolled away while conversing with the host. To get the old behavior back, SET TERMINAL ROLL ON. See the description of this command in the OS/2 section of CKCKER.UPD. Q: The SET TERM COLOR REVERSE command is gone! Version 190 now says "Sorry, this command has been retired. Reverse video is now accomplished simply by exchanging the fore- and background colors." I prefer the ability to set reverse video to whichever color scheme I wish. A: The old way was simply not workable -- it appeared to work only by accident. When all the VT100 features were fixed and VT220 and ANSI features were added, plus the cell-coloring extensions, there was no way to keep this Feature. Color is used not only for regular characters, but also to denote underlining, blinking, and (naturally) also for explicitly- colored characters. So it makes no sense to have one fore- and background color for reverse video. How, for example, does one flip the screen between normal video and reverse video when it has 128 different colors showing? This is a required feature of VT100 and higher DEC terminals (DECSCNM = ESC [ ? 5 h/l). Q: Reverse video doesn't always seem to actually reverse fore/background colors. For example, if I have the terminal set to black on white, reverse video comes out a rather muddy light gray on dark gray. If the terminal is set to light gray on dark gray, reverse is black on white. If the terminal is black on light gray, reverse video really is reverse. A: The explanation for this is a bit technical: The video adapter stores each screen character in a two-byte cell. The first byte of each cell contains the 8-bit character value. The second byte contains the video attributes for the character, and looks like this: Background | Foreground Color | Color +---+---+---+---+---+---+---+---+ | b | R | G | B | i | R | G | B | +---+---+---+---+---+---+---+---+ b = blink i = intensity 0 = nonblinking 0 = normal 1 = blinking 1 = high The i bit applies to the foreground color. The meaning of the b bit depends on the VIO state; it can mean (a) the foreground character blinks, or (b) the background color is high-intensity. C-Kermit uses (b) because blinking only works in a fullscreen session. The RGB bits select the desired mixture of Red, Green, and Blue. When video is reversed, only the colors -- the RGB bits and not the i or b bits are swapped. Otherwise, we would obtain effects that are even more surprising and undesirable: highlighted characters would no longer be highlighted, etc. If blinking were implemented by real blinking rather than color simulation, then a bright foreground could become a blinking foreground, etc. The confusion arises because many of the colors in the SET TERMINAL COLOR command are not "true" (3-bit) colors, but rather effects obtained with the high-intensity bit, as shown in Table 1. If you stick to non-intense colors in your terminal screen, then reverse video will work as expected. Table I: OS/2 C-Kermit Colors ---------------------------------- Name Intensity Remarks BLACK Normal BLUE Normal BROWN Normal CYAN Normal DGRAY High Dark gray GREEN Normal LBLUE High Light gray LCYAN High Light cyan LGRAY Normal LGREEN High Light green LMAGENTA High Light magenta LRED High Light red MAGENTA Normal RED Normal WHITE High YELLOW High ---------------------------------- LIMITATIONS Certain VT terminal features are not implemented, including: . Smooth scroll . Switching between 80- and 132-column mode and others are simulated: . Double-width and double-height lines (by doubling characters) . Underlining (by a distinct color) . Blinking (by the brightness of the background color) Blinking is simulated by a shift in background intensity because blinking cannot be done in an OS/2 window. Even in fullscreen sessions, the underlying video drivers tend to be buggy and inconsistent in their support for the blinking attribute. Underlining is simulated because color PC video adapters do not support underlining in text mode. Note that you should use a distinct background color for underlining if you want blinking text differentiated from underlined text. Double-height and -width lines are simulated because they cannot be accomplished in text mode; text terminal emulation in graphics mode would be painfully slow. C-Kermit's VT220 emulation lacks the following VT220 features: . Host-directed ISO 2022 character-set designation and invocation (use the SET TERMINAL CHARACTER-SET command for this). . Protected fields (because we don't have enough attribute bits): CSI Ps " q (Ps = 0, 1, 2) - select characters to be erasable or not CSI ? Ps K (Ps = 0, 1, 2) - erase erasable characters in line CSI ? Ps J (Ps = 0, 1, 2) - erase erasable characters in display . Various host-initiated printing controls (highly dependent on DEC printers): CSI ? 43 h/l - Large/normal characters CSI ? 44 h/l - Color/monochrome CSI ? 45 h/l - RGB vs HLS color system CSI ? 46 h/l - Background+foreground/only-foreground to printer CSI ? 47 h/l - Rotated/normal printing . Downline-Loadable Character sets (DRCS) (graphics mode would be required) . VT240 Tektronix, Sixel, or ReGIS graphics (graphics mode would be required) . UDK's (can be done if there is a demand, but it might be tough finding fifteen keys with unique and unused scan codes to map them to!). ANSI TERMINAL EMULATION So-called ANSI terminal emulation is a subset of VT100 emulation, but with host- controlled colors and using 8-bit IBM code-page 437 characters for line and box drawing, plus some unique escape sequences for cursor save/restore. ANSI terminal emulation is generally used to communicate with BBSs, and has nothing to do with ANSI (the American National Standards Institute); the misappropriated term "ANSI" seems to derive from the MS-DOS (and OS/2) ANSI.SYS console driver, itself misnamed. C-Kermit supports ANSI terminal emulation as of edit 190, via SET TERMINAL TYPE ANSI. C-Kermit's ANSI emulation does nothing special with the keys; in particular, there is no attempt at "PCTERM" keyboard handling, in which unique key-down and key-up sequences are transmitted separately for every single IBM key (including Shift, Alt, etc), apparently needed for the SCO UNIX console terminal, but evidently not needed for BBS's. There is also no support for so-called ANSI music, which violates every conceivable rule (laid down by ANSI itself!) about the structure and form of escape sequences. 132 COLUMNS You can use 132 columns in a fullscreen session if your video adapter supports it. Issue the command: MODE CO132,xx (where xx is the desired screen length) at the CMD prompt, or: RUN MODE CO132,xx at the C-Kermit prompt. You can switch back to 80-column mode via: [ RUN ] MODE CO80,xx 132-column mode is not supported in an OS/2 window. Host-directed switching between 80- and 132-column mode is presently not supported. OTHER TERMINAL EMULATION ITEMS... Scrolling is slower in an OS/2 Window. This is because OS/2 is operating in graphics mode (to simulate text mode) and must draw each dot (pixel) individually. Fullscreen scrolling, which uses character mode, is much faster. But when running C-Kermit in fullscreen mode you lose the ability to cut and paste between applications. Unless you say otherwise, C-Kermit employs a trick to make screen updates faster: The cursor disappears briefly while the screen is being updated and appears again within a few milliseconds after screen activity stops. Since this can be disconcerting to fast typists, edit 190 adds a new command, SET TERMINAL HIDE-CURSOR { ON, OFF } to let you turn this feature off (or back on). Experimentation on a relatively fast PC shows that TERMINAL HIDE-CURSOR OFF makes screen updates about 1/3 slower on network connections, but makes little difference on serial connections, where the communication speed is the bottleneck. SET FLOW XON/XOFF prevents you from transmitting Ctrl-S and Ctrl-Q characters to the host. These characters are commands (Search and Quote) in EMACS. To use Ctrl-S and Ctrl-Q as commands to host applications, you must SET FLOW NONE or SET FLOW RTS/CTS. Shift-in/Shift-Out works only if you SET TERMINAL LOCKING-SHIFT ON (except in the case of the DEC Technical Character Set, used for line- and box- drawing, etc, which is handled specially). Host-directed US/UK character-set switching (ASCII 35 interpreted as number sign in US, Pound Sterling sign in UK) works only if you have SET TERM CHARACTER-SET ASCII. Under certain conditions on certain systems, OS/2 C-Kermit has been observed to put the entire screen (or subsequent help screens) in blinking mode. For example, when running in a fullscreen session, CONNECT mode active, background color is high-intensity, and using Alt-Esc to get to the desktop, then resuming the Kermit window can produce this effect; reportedly, this is caused by a bug in some of OS/2's video drivers. Alt-R (reset) makes the blinking stop. To avoid the problem altogether, don't use high-intensity background colors. See Table I above. COMMAND PROCESSING Command recall, added in edit 190, allows you to recall earlier commands by typing Ctrl-B or UpArrow. In other C-Kermit versions (UNIX, etc) Ctrl-P is used for this purpose, but you can't use Ctrl-P in OS/2 because it turns on your printer. If you type Ctrl-P at the C-Kermit> prompt and nothing happens (no beep, no recalled command, but you hear some disk activity)), then type Ctrl-P once more (to turn off the printer) and use Ctrl-B for command recall instead. As of edit 190, C-Kermit should be able to handle bare backslashes in file specifications in most commands, e.g. send c:\letters\angry.txt cd e:\temp However, you still can't end a command with a single backslash, e.g.: cd c:\ because C-Kermit treats a single backslash at the end of a command as a line-continuation indicator. To get around this, double the backslash: cd c:\\ FILE TRANSFER Be sure to activate the appropriate type of flow control before transferring files, especially if you are using long packets: SET FLOW RTS/CTS Preferred, if the device your PC is immediately connected to supports it. SET FLOW XON/XOFF Used end-to-end, but subject to noise corruption, propogation delays, etc. By default OS/2 C-Kermit uses whatever flow control is already configured for the communications port driver at the time you started C-Kermit. WARNING: If your FLOW-CONTROL setting is RTS/CTS and serial connections don't work (screen and keyboard seem to be frozen), it is likely that the device and/or cable is not providing the CTS signal to your PC. In that case, try using SET FLOW NONE or SET FLOW XON/XOFF. For transferring files with HP-48 Series calculators, use all the default settings (short packets, window size 1, etc), but SET FLOW NONE. There is no way send the complete contents of a file in text mode if the file contains a Ctrl-Z character that is not the last character in the file. In other words, Ctrl-Z is always treated as end-of-file when the FILE TYPE is set to TEXT. There should be a SET EOF {CTRLZ, NOCTRLZ} command as in MS-DOS Kermit to control the treatment of Ctrl-Z characters in text files. Reportedly (not confirmed), wildcard expansion (e.g. "send oofa.*" or "echo \ffiles(oofa.*)") does not work on NFS-mounted volumes under IBM TCP/IP 1.2.1 (but these operations do work OK under IBM TCP/IP 2.0). SET FILE COLLISION UPDATE has the following peculiarity: On FAT (i.e. DOS) file systems, a file's date/time is recorded with a granularity of 2 seconds, whereas on most other kinds of file systems (UNIX, VMS, OS/2 HPFS, etc), it is recorded to at least the exact second. Thus when OS/2 C-Kermit records the timestamp of an incoming file, the "one's place" of its time is truncated. If it was an odd number, therefore, it will be one second "older" than the date/time of the original file. Downloading the same file again with SET FILE COLLISION UPDATE would result in a second, unnecessary transfer of the file, since the remote file would appear to be newer than the local file. Therefore, OS/2 C-Kermit, when making this comparison, will treat two times as equal if (a) the local file's time is an even number, (b) the remote time is equal to (of course) or exactly one second greater than the local time, and (c) the local file system is FAT. Refreshing the fullscreen file transfer display (by typing Ctrl-L or Ctrl-W) does not refresh all of the fields. REMOTE ACCESS If your OS/2 2.x system is running IBM TCP/IP, it is possible to TELNET to your OS/2 system to have a CMD session, in which you can run only character-mode commands and applications. Depending on the kind of machine you are TELNETing from, you might be able to run only programs which use standard (or real keyboard) input and standard output. If the program does VIO screen output it will run in a TELNET session only if you TELNETed into the OS/2 PC from another OS/2 PC, not from (for example) a UNIX or VMS machine. The reason is that intercepting and relaying VIO screen output to a remote machine is only possible with support from the remote machine, which is only implemented in the OS/2 TELNET client. Since C-Kermit does VIO output, it will not work if you TELNET into the OS/2 machine from a non-OS/2 machine. It will also only work if you TELNET into the OS/2 machine from another OS/2 machine using the real IBM OS/2 TELNET program, not with any other TELNET client application (including C-Kermit) because the mentioned client support is implemented only in the IBM TELNET application. If you run a PM application (such as "help") while TELNETed to your OS/2 system, your session will hang because control will have been transferred to the real keyboard, mouse, and screen. Similarly, if you manage to invoke the OS/2 critical error handler during a character-mode application (for example, "dir a:" when there is no diskette in the A: drive). You can run C-Kermit in a remote TCP/IP session and tell OS/2 C-Kermit to SET LINE to a serial device and call up a third computer. Thus OS/2 C-Kermit can be used as a modem server in the TCP/IP environment. However, at present you cannot transfer files between your local Kermit program and OS/2 C-Kermit when TELNET'd *to* OS/2 because sockets are different from file handles in OS/2 and are not passed to child processes via the "tty" file handle, as they are in UNIX in the same situation. It is also possible to get an OS/2 CMD session on a serial connection when dialing into your OS/2 system if you are running a product such as OS2YOU, but C-Kermit file transfer does not yet work in this environment either. (End of CKOKER.BWR)