═══ 1. Welcome ═══ ═══ 1.1. Introduction ═══ Welcome to OS/2 C-Kermit 5A(191), full-function 32-bit native communication software for your OS/2 system from Columbia University, offering terminal emulation, file transfer, script programming, and international character-set conversion for both serial and network connections. The documentation for C-Kermit is the book, Using C-Kermit. If you are using C-Kermit software, please purchase the book if you haven't done so already. It teaches how to use the software effectively, how to get the most out of it, and how to take advantage of its advanced features. Book sales provide most of the income that pays for the Kermit project, a unique nonprofit worldwide cooperative software development effort. Kermit software is protected by copyright. It is not in the public domain. Please read the copyright notice and licensing information. This file describes the changes made to OS/2 C-Kermit since version 5A(188) was released and the first edition of Using C-Kermit was published to accompany it in early 1993. Also incorporated are numerous hints & tips and questions & answers arising from years of help-desk experience. This INFO file applies to version 5A(191) of OS/2 C-Kermit, released March 1995. This file is a supplement to, and not a replacement for, Using C-Kermit. This file was written by: Frank da Cruz, Christine M. Gianone, and Jeffrey Altman, Columbia University, New York City, March 1995. Acknowledgements and thanks to Kai Uwe Rommel, ARS Computer and Consulting GmbH, MБnchen, Germany, and to Dave Bolen for some of the information herein. ═══ 1.2. OS/2 Environment ═══ OS/2 C-Kermit 5A(191) is available only as a 32-bit application for OS/2 2.00 and later. Version 5A(190) was the last version produced in a 16-bit version. The 32-bit version is designed to take advantage of OS/2 2.x and Warp features including:  Multiple threads for efficient task scheduling and low CPU load  Fast semaphores for intraprocess communication  HPFS  Extended attributes  Sizeable terminal screen (Warp only)  VIO session mouse support  TCP/IP, NETBIOS, DECnet, and Named Pipes networking methods  LAN Server remote modems  PM Clipboard  High-speed asynchronus communication services  REXX language interface And all of C-Kermit's file transfer, terminal emulation, script programming, and character-set conversion features. The 16-bit version lacks certain features of the 32-bit version due to architectural or compiler limitations: various printer operations, the REXX programming interface, SET FILE TYPE LABELED (for OS/2 Extended Attributes), mouse support, Named Pipe support, NETBIOS networking, loadable fonts, performance improvements, etc. The 32-bit version should be used with OS/2 2.x and Warp. The 16-bit version is for use on OS/2 1.x systems. ═══ 1.3. Copyright Notice ═══ Copyright (C) 1985, 1995, 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. ═══ 1.4. Licensing ═══ C-Kermit software is distributed by Columbia University and its licensees. Kermit software may not be resold or otherwise provided to customers or clients of commercial enterprises, or included with any product (including CD-ROM software collections), without the written permission of Columbia University. Large institutional and corporate users of Kermit software are encouraged to help support our efforts by purchasing adequate copies of the manuals and/or making tax-deductible contributions, and are requested to provide their own internal technical support (which may liaison with ours) rather than sending all of their users straight to us for help. CLICK HERE for further information about technical support. Contact Columbia University for further information about licensing and quantity discounts. ═══ 2. C-Kermit Documentation ═══ The user manual for C-Kermit 5A is the book: Using C-Kermit by Frank da Cruz and Christine M. Gianone, published by Digital Press / Butterworth-Heinemann, Woburn, MA, USA, 1993, 514 pages, ISBN 1-55558-108-0. Using C-Kermit contains thorough step-by-step instructions, examples, illustrations, tutorials, reference material, tables, a bibliography, and a comprehensive index. It shows you how to hook up, get online, interact with dialup and network hosts and services, upload and download files, achieve maximum efficiency, access text in many languages, and how to automate all your routine communications tasks. If you do not have this book, please order it. You may use the enclosed order form. The book will show get the most out of your Kermit software. It will answer your questions and give you ideas. And remember, book sales are the major source of funding for the Kermit project. This INFO file is a supplement to, and not a replacement for, Using C-Kermit, concentrating on the OS/2-particular aspects of C-Kermit, and describing features that were added recently. Using C-Kermit is available in computer bookstores or directly from Columbia University. To order from Columbia University, use the order form. You can also order by phone from the publisher, Digital Press / Butterworth-Heinemann, with MasterCard, Visa, or American Express: +1 800 366-2665 (Woburn, Massachusetts office for USA & Canada) +44 1993 414414 (Rushden, England office for Europe) +61 2 372-5511 (Chatswood, NSW office for Australia & New Zealand) +65 220-3684 (Singapore office for Asia) A German-language edition is also available: C-Kermit-EinfБhrung und Referenz, Frank da Cruz and Christine M. Gianone, Verlag Heinz Heise, Hannover, Germany (1994). ISBN 3-88229-023-4. Deutsch von Gisbert W. Selke. Price: DM 88,00. Verlag Heinz Heise GmbH & Co. KG, Helstorfer Strasse 7, D-30625 Hannover. Tel. +49 (05 11) 53 52-0, Fax. +49 (05 11) 53 53-1 29. ═══ 2.1. Documentation Order Form ═══ _______________________________________________________________________ OS/2 C-KERMIT DOCUMENTATION ORDER FORM Using C-Kermit, by Frank da Cruz and Christine M. Gianone, Digital Press / Butterworth-Heinemann, 1993. 504 pages. Payment in US dollars: USA, Canada, and Mexico: $36.95. Elsewhere: $47.00. Price includes shipping. Do not add sales tax. _______________________________________________________________________ ________ Book Using C-Kermit, $36.95 / $47 . . . . . . . . $__________ Quantity You may pay by (1) credit card or (2) check: _______________________________________________________________________ 1. PAYMENT BY CREDIT CARD [ ] MasterCard [ ] Visa AMOUNT OF YOUR PAYMENT. . . . . . $__________ Card Holder______________________________ Today's Date ______________ Card Number _____________________________ Expiration Date ___________ _______________________________________________________________________ 2. PAYMENT BY CHECK [ ] If your check will not be drawn on a USA bank, please add $35.00 check-cashing fee. TOTAL AMOUNT OF YOUR CHECK . . . . . . . . . . . . . . . . $__________ Please make your check payable to: Columbia University Kermit Distribution _______________________________________________________________________ SHIPPING INFORMATION Name __________________________________________________________________ Organization __________________________________________________________ Address _______________________________________________________________ City ______________________________ State/Province ____________________ ZIP or Postal Code ________________ Country ___________________________ Telephone and/or E-mail _______________________________________________ _______________________________________________________________________ Return this form by e-mail to kermit@columbia.edu, by fax to +1 212 663-8202, or by post to: Kermit Distribution Columbia University 612 West 115th Street New York NY 10025-7721 USA _______________________________________________________________________ (End) (Thank you!) ═══ 2.2. Errata & Corrigenda ═══ The following errors in Using C-Kermit (first edition, English, first printing) have been noted, most of them by Gisbert W. Selke, while translating the book into German: PAGE REMARKS xviii Fridrik Skulason's name is spelled with an eth, not a d. xx Ditto. 13-14 The list of systems supported by C-Kermit is not exhaustive. New systems discovered since the printing date are listed in the file CKCxxx.UPD, where xxx is the current edit number, e.g. 190. 46 The SET CARRIER description says that it doesn't take effect until the next SET LINE command. In fact, it can have an effect at certain other times too, such as when you issue any communication-oriented command that changes the communication device modes. The SET CARRIER AUTO description should say: "Requires carrier during CONNECT, TRANSMIT, INPUT, OUTPUT, and SCRIPT commands, but not during DIAL operations or file transfer." These fine distinctions in SET CARRIER operation apply mainly to System-V or POSIX based UNIX C-Kermit implementations and OS/2 C-Kermit, but (in general) not to others. 53 Table 3-2, HST-COURIER, contains extraneous typesetting information ("Courier10PitchBT-Roman"). (This probably happened because an error-correcting protocol was not used to download the final PostScript to the printer :-) Two new modem types, COURIER and SPORTSTER have been added, which are the same as HST-COURIER. The description should say "US Robotics modems". 85 The command in the final line in the example, "send olga It's 765-4321", should be underlined. 91 SET KEY CLEAR added in 5A(190), restores default key mapping. 93 The description of SET SESSION-LOG fails to mention that XON and XOFF are removed from a text-mode session log. 101 In the HINT inset, the words SEND and RECEIVE should be exchanged. 144 In REMOTE CD [ directory ] description, the brackets should be in italics. 145 There should be no right parenthesis in REMOTE DIRECTORY [ filespec) ]. 150 "Now start C-Kermit on the VAX..." should say "Now start C-Kermit on the UNIX system..." 164 The description of compression predates the new SET REPEAT command, described below. 172 Table 9-2. The text fails to mention that the Chinese Roman, Icelandic, and Japanese Roman sets are not used by C-Kermit. All nine occurrences of accent acute (') by itself in column 6/00 should be accent grave (`). Column 7/14 for Norwegian should show macron (overline) rather than vertical bar. 174 Table 9-4, row 03, column 13 should be O-acute, not O-grave. 178 Next-to-last paragraph: "rlogin -8", not "rsh -8". 185 C-Kermit>set unknown-char-set (not "sent unknown-char-set"). 189 The description of JIS X 0201 says that it differs from a Latin Alphabet in that the right half has some empty positions. Some Latin Alphabets (e.g. Latin/Hebrew) also have empty positions. 195 Second example: "type diab.asc" instead of "type diab.lat". 197 6th line from bottom: MSCUSTOM.INI, not MSKERMIT.INI. 203 Examples should say XM (XMIT) rather than XF (XFER). 215 Example should say "duplex" rather than "duplux". 226 \m() variables are really not like \%a-style global variables, in that the do not get recursively evaluated - on the literal definition is returned. 239 Line 3: "secret" should be "oofa". Middle paragraph, material beginning "In these commands, literal strings to be compared must not contain any spaces..." As of version 5A(190), this is no longer true. Multiple words can be grouped together within braces, e.g. "if equal {\%a} {here are four words} echo ok" 242 First line should have no comma at the end. 246 Description of label syntax should state that in a macro definition, labels are set off by commas. 249 In the syntax description of the FOR command, the words "initial", "final", and "increment" should be in italics, and there should be no right angle bracket (>) following the word "increment". Also, the description of the FOR command fails to state explicitly that the increment can be negative for counting backwards, in which case the completion test is that the variable becomes less than the final value, not greater than the final value. Also, the book does not mention that the value of the loop variable can be changed by the commands in the loop contents, and this will affect the execution of the loop. 250 In the wakeup-call example, the tests should be "if llt" rather than "if not lgt". 252 Comments on the example should say "third is smaller or equal". 252 Text fails to mention that functions can not change their arguments (i.e. arguments are passed by value). 254 \Flower() and \Fupper() functions only work correctly on 7-bit ASCII letters. 258 Table 12-2, operator |. Example should say \%a | 4 gives value 6. 264 Table 12-3, entry "double width line" should be \27#6, not \27#4. 264 Table 12-3, entry "set scrolling region" should refer to top row, bottom row; not to row, column. 264 Table 12-3, entry "Stops transparent printing", Kermit Notation column, should say "\27[4i", not "\27[0i". 264 Table 12-3, entry "Starts transparent printing", Kermit Notation column, should say "\27[5i", not "\27[0i". 264 Table 12-3, entry "VT200 ID" should say "ESC [ 62c", not "ESC [ 6c". 264 Table 12-3, entry "VT300 ID" should say "ESC [ 63c", not "ESC [ 6c". 266-267 The section File Transfer Shortcuts does not apply to file transfer with MS-DOS Kermit 3.13 or later. The escape sequences associated with the TERMINALR and TERMINALS macros in MS-DOS Kermit 3.12 and earlier are now used for changing screen-writing direction during terminal emulation, as on real DEC Hebrew VT terminals. See the MS-DOS Kermit 3.13 update notes (KERMIT.UPD) for detailed information. 267 The description of the RETURN command says it may not be used in the command list of a FOR, WHILE, or XIF command. As of edit 190, this is no longer the case. 268 Carl, not Karl, Friedrich Gauss. 269 The OPEN !READ command example for VMS should use /EXCLUDE= rather than /EXCEPT=. 272 Line 14 of example should say "if = \%n \%d", not "if = \%i \%d". 275 Comma missing after closing brace of FOR loop in CALL macro. 276 Line 13: When you give a SERIAL (not LINE), NET, or CALL command... 286 The OUTPUT command in the middle of the page should say "\27[\?6c" rather than "\27[\?1c". 287 SET INPUT TIMEOUT QUIT in the VMSLOGIN macro should be SET INPUT TIMEOUT PROCEED. The continuation hyphen is missing from three lines. The VMSLOGIN macro in the distributed CKERMIT.INI file corrects these errors. 294 The CISLOGIN macro has several mistakes. The following section: input 5 User ID:,- output \%2\13,- input Password:,- output \%3\13,- input 20 Enter Choice!,- Should be replaced by: input 5 User ID:,- output \%1\13,- input 5 Password:,- output \%2\13,- input 20 CompuServe Information Service,- 299 Paragraph after "define ACCESS": "and assigned to the local temporary variable \%9" should be removed. Towards the bottom of the page, the example and the last two paragraphs should be adjusted to discuss the ACCESS macro definition as it appears at the top of the page! The \%9 variable is not used. The example "if def \%9 doaccess { \%2} \%9" should read "if success doaccess { \%2} \v(return)". In the first line of the last paragraph, "\%9" should be changed to "\v(return)". 315 VMS examples: $ define compuserve $sys$system:kermit.exe sys$login:compuserve.cmd $ define sprintnet $sys$system:kermit.exe sys$login:sprintnet.cmd Should be: $ compuserve :== $sys$system:kermit.exe sys$login:compuserve.cmd $ sprintnet :== $sys$system:kermit.exe sys$login:sprintnet.cmd 323-324 The description of C-Kermit program exit status codes fails to mention the special method used by (Open)VMS, in which these codes are assigned to the symbol CKERMIT_STATUS (see CKVKER.BWR). 336 PRINT, PING, and similar commands work by running the corresponding system command (PRINT, lp, lpr, etc), which must be in the user's PATH with execute permission, otherwise an error message appears stating "command not found" or "permission denied", etc. 346 SET KEY CLEAR added in 5A(190), restores default key mapping. 352 The syntax of SET TELNET TERMINAL-TYPE should include italicized square brackets around "text" to indicate that the text is optional, and that if it is omitted, the TELNET TERMINAL-TYPE reverts to the default, usually the terminal type of your login session. 352 The entries for SET TERMINAL ANSWERBACK, ARROW-KEYS, KEYPAD-MODE, and SCROLLBACK, etc, are missing. These are OS/2-specific commands (all of these except those new to edits 189 and 190 - are described in the OS/2 Appendix on page 432). See the OS/2 updates file. 353 The entries for SET TERMINAL TYPE and WRAP are missing. These are also OS/2-specific commands (described on page 432). 354 SET TRANSMIT PAUSE description is inaccurate. An accurate description appears on page 204. 366 In Table II-2, "ATSO=0" should be "ATS0=1". 402-403 "define sys$input" and "define sys$output" in the examples on these two pages should be "define /user_mode sys$input", etc. This makes the definitions effective only for the next program invocation. In that case the "deassign sys$input", "deassign sys$output" commands can be removed. 403 The section "Running C-Kermit in DCL Command Procedures" fails to describe how to use C-Kermit's exit status codes (see CKVKER.BWR). 409 The Backup date in the example at the top of the pages should not be earlier than the Created and Revised dates. The maximum record length is 65534, not 32767. 419 The "stepping-stone" at the beginning of the OS/2 Appendix fails to refer readers to the CKCKER.BWR and CKOKER.BWR files, and the OS/2 updates file CKOKER.UPD. 420 Footnote. The COMDMA driver, though discussed in the OS/2 documentation, never actually existed. The regular COM.SYS driver is used instead. 425 The first paragraph in the Serial Communications section fails to mention that other serial-port device names are also acceptable. 425 Bottom - OS/2 C-Kermit now also supports VT100, VT220, and ANSI terminal emulation. 428-432 These pages are largely obsolete as of version 5A(190). The CONNECT-mode actions shown in Table V-1, as well as the Arrow keys (Table V-2), Keypad keys (Table V-3), now have \Kverbs associated with them, exactly as in MS-DOS Kermit. Additional \Kverbs are provided for VT220 (LK201) F keys and editing keys. 430 Table V-3 fails to include the Num Lock key, and the accompanying text does not mention the fact the fact that it can be assigned with SET KEY. See CKOKER.BWR, CKOVTK2.INI, and the OS/2 updates file for further information. 431 Third paragraph. "F1 through F4" should be "F1 through F10". Also, the Home key should be included in the list of keys that control screen rollback. 432 The description of SET TERMINAL ANSWERBACK is missing. Also, numerous new SET TERMINAL commands have been added for OS/2; see the OS/2 updates file. 435-439 Tables V-4 through V-9 need to be augmented with VT220 sequences. See the OS/2 updates file. 438 No explanation of "nbits". 1=8-bit characters, 2=7-bit characters. "baud" should be "bps". 440 Table V-10. ESC W misplaced (alphabetically). 447 "SET FILENAMES" should be "SET FILE NAMES". 462 The text at the top of the page should say "ISO 8859", not "ISO 8858". 463 Table VIII-3. Same as for Table 9-2, page 172. Plus: Fr-Canadian should be listed as Canadian-French. 486 The Cyrillic expansion for "KOI" is misspelled. 491 Reference [6]. The third Cyrillic word is misspelled. 495 Reference [48]. "Unterschiessheim" should be "Unterschleissheim". Reference [50]. Second Cyrillic word misspelled. ... Hebrew character set tables need to be added. Index Needs entries for: Command-line options Delay Encryption Grouping of words in commands Commands, grouping of words in Length, of packets Length, of files Prompt, how to set Spaces, in commands Telenet (see SprintNet) Terminal servers, dialing out from umask Please send reports of other errors to the authors, as well as suggestions for improvements, additional index entries, and any other comments. ═══ 3. Installation ═══ C-Kermit should be installed by running the INSTALL.CMD REXX program. INSTALL.CMD installs the proper version of OS/2 C-Kermit for your system into the directory of your choice, configures the initialization files for the default values that you choose, and with your permission updates your CONFIG.SYS file by adding the C-Kermit directory to the PATH, LIBPATH, DPATH, and BOOKSHELF lines. To execute the install program, place the C-Kermit distribution diskette in the A: drive and then either click on the drive icon from the desktop or type "a:install" in an OS/2 command window. (You can also use disk B:). Then simply follow the instructions on your screen. To bypass the INSTALL procedure and install OS/2 C-Kermit by hand, please read the installation instructions in the OS/2 Appendix of Using C-Kermit. ═══ 4. New Features ═══ New features have been added in many areas since the release of version 5A(188). The following sections describe the changes and additions in detail: Program Management Making and Using Connections Terminal Emulation File Transfer New Client/Server Features International Character Sets Script Programming External Protocols New Command-Line Options Network Communications ═══ 4.1. Program Management ═══ Significant advances have been made in processing and parsing of commands at the C-Kermit prompt: Runtime Priority Command Processing - Command recall, retry, etc. Commard Parsing Improvements - Entering OS/2 filenames, etc. DIRECTORY Command Improvements The SET EXIT Command The CKERMIT.INI Environment Variable ═══ 4.1.1. Runtime Priority ═══ As of edit 191, you can set C-Kermit's runtime priority for best fit with your system's multitasking environment. The command is: SET PRIORITY { FOREGROUND-SERVER, REGULAR, TIME-CRITICAL } By default, C-Kermit's priority is FOREGROUND-SERVER, meaning that it is a bit higher than that of other processes, because one generally wants snappy performance from a communications application. In case Kermit is slowing down other processes too much, use this command to reduce its priority to REGULAR. On the other hand, if other processes are slowing Kermit down too much, then set the priority to TIME-CRITICAL; this will, of course, interfere with your other processes. ═══ 4.1.2. Command Processing ═══ These features apply only when you are typing commands at the C-Kermit> prompt, and not to command file or macro execution. They were added in edit 190. Command Retry Commard Recall Typeahead ═══ 4.1.2.1. Command Retry ═══ If you enter a command that contains a syntax error, C-Kermit now reprompts you automatically with the portion of the command that was correct, so you don't have to retype it. Example: C-Kermit>set block-check oofa ?No keywords match - oofa C-Kermit>set block-check ▓ "▓" shows the position of the cursor after you are reprompted. At this point, you can type question mark (?) to find out what is legal here, or you can complete the command, or you can erase it with Ctrl-U, etc, just as if you had retyped the initial words yourself. If you want to disable this feature, tell C-Kermit to: C-Kermit> set command retry off ═══ 4.1.2.2. Command Recall ═══ As of edit 190, C-Kermit saves your commands in a command recall (history) buffer, which, by default, holds your last 10 commands. To recall your previous command, press the Up-Arrow key or type Ctrl-B (that is, hold down the Control or Ctrl key and press the B or b key). Type Up-Arrow (or Ctrl-B) again to recall the command before that, and so on. If you try to go back too far, C-Kermit beeps at you. Each time you recall a command, it appears before you as if you had typed it up to, but not including, the Enter (Carriage Return) that actually causes it to execute. If you want to execute the command, press the Enter key. If you want to edit it, use the editing keys, including Ctrl-U to erase it. When you are viewing recalled commands, you can also go forwards in the command recall buffer by pressing the Down-Arrow key or typing Ctrl-N. This is handy in case (for example) you went back too far. You can change the size of the command recall buffer to hold any number of commands you like, subject to the memory limitations of your computer. The command is: SET COMMAND RECALL-BUFFER-SIZE number where number is the number of commands you want to keep. The more you keep, the more memory C-Kermit uses. If you enter a size of 0, the command recall feature is disabled. Whenever you give the SET COMMAND RECALL-BUFFER-SIZE command, your previous command history is lost. You can display the size of your command recall buffer, as well as your COMMAND RETRY setting, with SHOW COMMAND. Warning: Other versions of C-Kermit use Ctrl-P to go up in the command buffer, but you should not use Ctrl-P in OS/2 because it is likely to turn on your printer! (An OS/2 feature.) 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 again to turn off the printer. ═══ 4.1.2.3. Typeahead ═══ Typeahead is now permitted during entry of interactive commands. Typeahead is not preserved, however, over execution of command files or macros, because these might themselves require keyboard input, or might enter CONNECT or file transfer protocol mode. ═══ 4.1.3. Command Parsing Improvements ═══ Command Parsing Improvements were added to ease the use of C-Kermit by those familiar with OS/2 file and directory naming conventions. Entering OS/2 Filenames The SET COMMAND QUOTING Command ═══ 4.1.3.1. Entering OS/2 Filenames ═══ Certain characters have special uses in C-Kermit commands: space separates command words, backslash is a prefix for special items like variable names, question mark produces a short help message. How does one refer to files or directories whose names contain these characters? In most contexts, you can include a literal space in a file or directory name using "backslash" notation (see pp.21-22 of Using C-Kermit). In this example, \32 is used to enter a Space character (32 is the ASCII code for Space): C-Kermit> cd a\32b C-Kermit> send w\32x.y\32z or by enclosing the file or directory name in braces: C-Kermit> cd {a b} C-Kermit> send {w x.y z} Backslashes in filenames (i.e. directory separators) must normally be doubled: C-Kermit> cd e:\\budget\\food C-Kermit> send c:\\ckermod.ini or represented as "forward" slashes: C-Kermit> cd e:/budget/food C-Kermit> send c:/ckermod.ini Question marks, which are used in OS/2 as "wildcards" to match any single character, must be quoted by backslash: C-Kermit> send cker\?\?\?.ini As of edit 190, it is possible to enter OS/2 and DOS file specifications in the natural way in most contexts, using backslash as the directory separator, for example: C-Kermit> send c:\ckermit\ckermit.upd This notation works in any command field where a file specification or a directory name is expected, except when the command ends in a backslash (explained later). "Natural notation", however, does not ordinarily work in command fields that Kermit treats as text strings, as in the RUN command. So, for example, while you can now type: C-Kermit> delete \foo\x.x You still must type: C-Kermit> run del \\foo\\x.x (because this is just "unknown" text that Kermit sends to OS/2). However, you still must represent imbedded spaces as \32. If desired, you can temporarily turn off Kermit's processing of backslashes and question marks to allow these characters to be used naturally in any command, using the new SET COMMAND QUOTING command. But as long as COMMAND QUOTING is ON, which is the normal situation, the rules are: 1. When parsing the name of an existing file or directory, Kermit first tries the literal string, and if it fails, then it evaluates the string for backslash escapes and tries again. For example, if you type: C-Kermit> send c:\mupeen\oofa.txt and the file c:\mupeen\oofa.txt exists, Kermit will send it. If you type: C-Kermit> send c:\%a and a file named %A does not exist in the root directory of the C: disk, Kermit will attempt to evaluate the \%a variable to obtain the name of the file. Affected commands include: CD, DELETE, DIRECTORY, IF [NOT] DIRECTORY, IF [NOT] EXIST, IF [NOT] NEWER, MSEND, OPEN READ, PRINT, PSEND, RENAME, RESEND, SEND, TAKE, TRANSLATE, TRANSMIT, and TYPE. 2. When parsing the name of an output file, Kermit first prescans the string to see if it contains any variable names, function calls, etc; if so, it evaluates the string; if not, it takes the string literally. For example, if you type: C-Kermit> receive \%a Kermit will attempt to evaluate the variable \%a to obtain the filename, rather than creating a file called %A in the root directory. But if you type: C-Kermit> receive \letters\oofa.txt Kermit will take the backslashes literally and attempt to create the file \letters\oofa.txt. Affected commands include: multine GET, LOG, OPEN APPEND, OPEN WRITE, RECEIVE, RENAME, TRANSLATE. 3. You can't mix single backslashes as directory separators and backslash escapes in the same string. If you want to include a directory specification AND backslash escapes in the same string, the directory separators must be either "/" or "\\", for example: C-Kermit> send c:ckermit/ckermit.\%a or: C-Kermit> send c:\\ckermit\\ckermit.\%a 4. You can't terminate a string with a single backslash, since that indicates a line continuation; you must use either "/" or "\\". For example, you can't type: C-Kermit> cd \ but you can type: C-Kermit> cd / or: C-Kermit> cd \\ 5. You can avoid ambiguities by using "/" or "\\" as directory separators, which is how you had to enter them before this change. Thus this change should be transparent to current users and existing scripts. Exception: This change does not apply to the SET LINE / SET HOST / SET PORT command, so any backslashes that must be included in the port or host name must either be doubled or replaced by "forward" slashes. For example, if you want to "set port \\server\modem", you must enter "set port //server/modem" or "set port \\\\server\\modem" (or "set port //server\\modem", or...) Minutiae: So what if a file called \%A exists in the root directory, but you want to send the file whose name is stored in the variable \%A? "send \%a" will send the former rather then the latter. Well, you can always FORCE an item to be treated as a variable by using the \Fcontents() function: "send \fcontents(\%a)". Here's another: single backslashes in a filename that is assigned to a variable won't behave as you might expect. For example: "define \%a \letters\oofa.txt", "dir \%a". The problem here is that \%a is evaluated recursively, and when the single backslashes are encountered in the first level evaluation, that triggers a second level, which destroys the string. Again, work around by using "/" or "\\" or "\fcontents()". Such problems will affect only the most advanced Kermit users (who should be able to cope with them) and are more than offset by the benefits to "ordinary" users who are more likely to use literal OS/2 file specifications in commands than C-Kermit variable or function names. ═══ 4.1.3.2. The SET COMMAND QUOTING Command ═══ There is a new command in edit 190 to turn C-Kermit's backslash and question-mark features off and on for any commands at all: SET COMMAND QUOTING { ON, OFF } SET COMMAND QUOTING OFF gives you the ability to forget about all the complicated rules regarding backslashes and question marks in commands. You can enter OS/2 file and device names in the natural way in any command at all, but you will not be able to get help by typing question-mark, nor enter variable names and so forth in commands (but backslash notation for special characters, e.g. \32 for an imbedded space, still works). When ON (which is the default), backslash and question mark fulfill their normal roles in C-Kermit commands. When OFF, backslash and question mark are treated just like any other ordinary text characters by the command reader. You can display the current command quoting setting with: SHOW COMMAND Examples: set command quoting off send foo.bar c:\foo\bar\baz\oofa.txt get d:\files\???.? set command quoting on instead of: send foo.bar c:\\foo\\bar\\baz\\oofa.txt get d:\\files\\\?\?\?.\? Or: set command quoting off cd \ set port \\server\modem directory e:\pictures\pic???.gif set command quoting on rather than: cd \\ set port \\\\server\\modem directory e:\\pictures\\pic\?\?\?.gif Caution: Expect unpleasant results if you try to run script programs with COMMAND QUOTING OFF. ═══ 4.1.4. DIRECTORY Command Improvements: ═══ As of edit 190, the OS/2 C-Kermit DIRECTORY command, which works by asking the command shell specified in the COMSPEC environment variable to print a directory listing, has been improved to allow option switches and output redirection to be included. The syntax is now: DIRECTORY [ filespec ] [ switches ] [ > file-or-device-name ] The file specification (if any) must precede any switches, and a space or tab must separate the filespec from the switches. If there is no file specification, then there can be no spaces in the switches or output redirection. Examples: directory ; List all files in current directory directory /p ; List all files, pause between screens directory >x.x ; List all files to file x.x directory /o-d>x.x ; List all files by date to file x.x directory a: ; All files on current directory of A: directory a:\foo ; All files in FOO directory of A: directory oofa ; List all oofa files directory oofa.* ; List all oofa files dir oofa.* /p ; List all oofa files, pause between screens dir oofa.* > prn ; Print a listing of all oofa files dir oofa.* /o-d > oofa.dir ; Chronological listing of oofa files to a file ═══ 4.1.5. The SET EXIT Command ═══ SET EXIT WARNING { ON, OFF } Tells whether C-Kermit should issue a warning message and require confirmation if an EXIT command, or a SET LINE (SET PORT), SET HOST, or TELNET command is given and a connection (dialed or network) still appears to be open, since any of these commands would close the currently open connection. The default is OFF, meaning no warnings. If SET EXIT WARNING is ON, a warning is issued if a network connection appears to be open: C-Kermit>exit A network connection to foo.bar.edu might still be active. OK to exit? at which point you can type Yes or No. You will also get a warning if the serial SET LINE device has the carrier (CD, DCD) signal and C-Kermit has not been told to SET CARRIER OFF: C-Kermit>set line com2 A serial connection might still be active on com1 OK to close? Note that not all versions of C-Kermit have access to the carrier signal; if your version of C-Kermit says "Modem signals not available" when you give a SHOW COMM command, then SET EXIT WARNING ON will always warn you about a possibly active serial connection when you try to exit after using a SET LINE (SET PORT) connection. SET EXIT STATUS number Tells C-Kermit to use the given number as its program exit (return) code. This lets the user set program return code without actually having to exit; for example, the user can OR in various bits at different times. Display the SET EXIT values with SHOW EXIT. The SET and SHOW EXIT commands were added in Edit 190. ═══ 4.1.6. Other New Commands ═══ SET BELL { AUDIBLE [ { BEEP, SYSTEM-SOUNDS } ], VISIBLE, NONE } Controls handling of Control-G (BEL) characters during terminal emulation and the method of providing informational messages during command mode. AUDIBLE uses a regular beep (default) or else OS/2 System Sounds (if you have them installed) to notify you of various conditions. VISIBLE flashes the screen for 1/4 second. NONE ignores BELs entirely. (Replaces SET TERMINAL BELL.) Edit 191. BEEP [ { ERROR, INFORMATION, WARNING } ] Makes a beep or other effect (or not), according to your SET BELL setting. Edit 191. CLEAR COMMAND-SCREEN Clears the command screen. Equivalent to OS/2 CLS command. Edit 191. CLEAR DEVICE-AND-INPUT Clear both the communications device input buffer and and input command buffer. (Replaces CLEAR BOTH) Edit 191. CLEAR SCROLLBACK Emptys the scrollback buffer of all contents including current terminal screen. Edit 191. CLEAR TERMINAL-SCREEN Clears the current terminal screen by scrolling it into the Scrollback buffer. Edit 191. SET PRINTER device-or-filename Where to send transparent-print, autoprint, or screen-copy (\Kdump) material during CONNECT. Default is PRN (your printer). You can also specify a disk file name, in which case the given file is created if it does not exist, or is appended to if it already exists. Use SET PRINTER NUL to discard printer output. SHOW PRINTER displays the current setting. This command does not affect the PRINT command itself, which always uses the underlying OS/2 PRINT command. It also does not affect the Print Screen key, since this is handled by OS/2 directly, and is never seen by C-Kermit. Edit 190. ═══ 4.1.7. The CKERMIT.INI Environment Variable ═══ The CKERMIT.INI environment variable, if defined, provides the pathname of a file to use as its initialization file, overriding the default procedure for locating the initialization file. ═══ 4.2. Making and Using Connections ═══ The following changes were made to the DIAL command in edit 191:  Since most people nowadays have high-speed error-correcting modems, the default for SET DIAL SPEED-MATCHING was changed on OFF, and the default for SET DIAL MNP-ENABLE was set to ON. Note that MNP-ENABLE really means "enable error correction and compression negotiation", and applies to all error correction and compression protocols, not just MNP. New commands, SET DIAL ERROR-CORRECTION and SET DIAL COMPRESSION were added to emphasize this fact, but for now they are just synonyms for SET DIAL MNP. Also note that this command presently takes effect only for TELEBIT, COURIER, and SPORTSTER modem types.  The CKERMIT.INI file defines a new macro, XDIAL, that dials repeatedly until the call is successfully answered or the user interrupts with Ctrl-C.  The CKERMOD.INI file now includes sample DIAL INIT-STRINGs for various types of high-speed modems not explicitly supported by the SET MODEM command. A new Services Directory and enhanced Port assignments significantly improve C-Kermit's functionality: Using the Services Directory Using Serial Communication Ports ═══ 4.2.1. Using the Services Directory ═══ In the original release of C-Kermit 5A, edit 188, the services directory feature was included mainly as an illustration of how C-Kermit's script programming language can be used to build handy communications tools, and so it was not presented or explained until Chapter 13 of Using C-Kermit, and therefore was probably missed by a lot of readers (and users). Since then, the services directory feature has proven to be quite useful in its own right, and has also been improved in one small but important way. Here is a brief nontechnical explanation. The services directory is a plain-text file in your Kermit directory, containing one line, or "entry", for each service that you want to access. Each service listed in your services directory can be connected to and logged in to automatically, no matter whether this involves dialing up a modem, making a network connection, or any other type of connection that C-Kermit can handle. The name of the services directory file is CKERMIT.KSD. The services directory can be used only if you are also using the standard C-Kermit initialization file. Each line in the services directory has the following parts: For example: HP9000 unixlogin olga net tcp/ip hp.xyzcorp.com where "HP9000" is the entry name, "unixlogin" is the login macro name, "olga" is the username, and "net tcp/ip hp.xyzcorp.com" are the connection details. To use this entry, you would give the following command at the C-Kermit prompt: C-Kermit> access hp9000 or: C-Kermit> access hp9000 xxxxxx where xxxxxx is your password on the computer you will be accessing. C-Kermit's ACCESS macro (defined in your C-Kermit initialization file) handles the connection details: "net" means it's a network connection; "tcp/ip" tells which type of network, and "hp.xyzcorp.com" tells the name or address (in this case, the name) of the computer or service on the network. If you don't supply a password to the ACCESS command, you are prompted for it. You do not (can not, and should not) include passwords in your services directory file. Here's another sample entry, in which the connection is made by dialing a modem: COMPUSERVE cislogin 765,4321 call hayes com1 2400 93,876-5432 Here, "COMPUSERVE" is the entry name, "cislogin" is the name of the login macro, "765,4321" is your CompuServe user ID, and the connection details are: "call hayes com1 2400 93,876-5432". "Call" means we will be making a phone call; "hayes" tells which type of modem, "com1" is the name of the device that modem is connected to, "2400" tells the communication speed, and "93,876-5432" is the phone number to dial. ═══ 4.2.1.1. Login Macros ═══ Each login macro looks for the appropriate prompts from the host or service and responds accordingly with your username, password, and/or other information, and then waits until it sees the main prompt of the host or service, or other indication that you have been logged in successfully. The following login macros are available in the standard C-Kermit initialization file, CKERMIT.INI: UNIXLOGIN For logging in to all types of UNIX systems: Solaris, HP-UX, Linux, IRIX, DG/UX, NeXTSTEP, OSF/1, SunOS, etc etc. The default system prompt (explained below) is "\13\10$\32"; that is, carriage return, linefeed, dollar sign, space. VMSLOGIN For logging in to DEC VAX/VMS or OpenVMS systems. The default system prompt is "\10\13$\32"; that is, linefeed, carriage return, dollar sign, space. This macro can also be used for logging in to DG AOS/VS systems if you specify a different prompt ("\13\10)\32"). NOTE: The VMSLOGIN macro has been updated to account for new procedures for use with VMS 6.0 and/or 6.1, while retaining compatibility with earlier VMS releases. VMLINELOGIN For logging into IBM mainframes with VM/CMS over linemode connections. VMFULLOGIN For logging into IBM mainframes with VM/CMS over fullscreen connections. CISLOGIN For logging in to CompuServe. DOWLOGIN For logging in to Dow Jones News/Retrieval. DJNRSPRINT For logging in to Dow Jones News/Retrieval over SprintNet. NOLOGIN For accessing computers or services that do not require logging in. Each login macro name must be followed by a username, even NOLOGIN. For NOLOGIN, just include a "dummy" name, like "xxxx", that will not be used. Other login macros can be easily constructed, modeled on those above. Read Chapters 11-13 of Using C-Kermit. for full instructions. If you add or modify login macros, you should put their definitions in your C-Kermit customization file, CKERMOD.INI. There was a problem with the login macros in C-Kermit 5A(188-189), namely that the system prompt was hard-coded into the macro. For example, the UNIXLOGIN macro assumed that the UNIX shell prompt was "$ " (dollar sign followed by space), but in many cases it might be something else, and the only way to allow for different prompts was to edit the macro itself. In C-Kermit 5A(190) and later, you may include the system prompt in your services directory by grouping it together in curly braces with the login macro name: {macroname prompt} For example: CSHELL {unixlogin \13\10%\32} olga net tcp/ip bsd.xyzcorp.com CHEMISTRY {vmslogin \10\13CHEM$} OLGA net tcp/ip chemlab.xyzcorp.com DG {vmslogin \13\10)\32} olga net tcp/ip aosvs.xyzcorp.com The first example specifies the C-Shell prompt, "% ", rather than using the default UNIX (Bourne Shell, K-Shell) prompt of "$ ". The second example accesses a system that has a custom prompt. The third uses the VMSLOGIN macro to access a Data General AOS/VS system by specifying the AOS/VS prompt, ") ", since otherwise the Username: and Password: prompts are the same as for VMS. The "backslash-number" notation is a way of including special (usually nonprintable) characters in C-Kermit commands and files, explained on pages 21-22 of Using C-Kermit. The number is the ASCII character number, such as 10 for linefeed, 32 for space. ═══ 4.2.1.2. Connection Details ═══ The Connection Details part of a services directory entry starts with one of the following words: CALL The connection is made with a phone call through a modem. SERIAL The connection is a direct (dedicated) serial connection. NET The connection is made on a network. The subsequent information depends on the type of connection. CALL must be followed by the following information, in this order: 1. The modem type (a valid SET MODEM value). 2. The name of the device on your computer that the modem is connected to. 3. The speed, in bits per second, at which to use the device. 4. The telephone number to dial. This can also be the name of an entry in your dialing directory. SERIAL must be followed by the following information, in this order: 1. The serial device name. 2. The communication speed. NET must be followed by: 1. The network type: TCP/IP, DECnet, NETBIOS, etc (a valid SET NET value). 2. The name or address of the host or service you want to connect to. 3. Additional network-specific information, like a service name or socket number. For TCP/IP network connections, you can include a socket number by appending to the IP name or address with a colon, for example: WEATHER nologin xxxx net tcp/ip madlab.sprl.umich.edu:3000 Create your services directory file using a text editor, as a plain-text (ASCII) file. If you are using a word processor, be sure to save your services directory as a plain text (ASCII) file. To use your services directory, just type "access" and the service name at the C-Kermit prompt, for example: C-Kermit> access hp9000 olga's password: __________ To list your services directory, type "list" at the C-Kermit prompt. To look up a particular services directory entry, type "list" and then the name, for example "list hp9000". ═══ 4.2.2. Using Serial Communication Ports ═══ In OS/2 C-Kermit, 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 [ device-name ] SET PORT [ device-name ] 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. If the device name begins with an underscore, but any non-numeric characters follow, a syntax error results. 3. SLIPCOM1, SLIPCOM2, ..., are special designations to be used for COM1, COM2, etc, when they are owned by the SLIP driver; for example, when you want to use C-Kermit to automate the SLIP connection process. See the section on SLIP for details. 4. 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"). (Hint: But see the SET COMMAND QUOTING command description.) 5. In cases (1), (3), and (4), C-Kermit attempts to open the device, and then, if successful, checks to see whether it is a real communications device. This would include redirectors such as VMODEM. If not, the SET LINE / SET PORT command fails. In case (2) above, no checking is done. NOTE: You can also pass an open file descriptor to C-Kermit on the command line, e.g.: [C:\WORK] ckermit -l 4 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. 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 given 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. 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. ═══ 4.3. Terminal Emulation ═══ VT220 and ANSI terminal emulations were added in edit 190, along with mouse support and numerous other features described in this section. Edit 191 adds: performance improvements; improved scrollback capabilities; adjustable mouse functions; dynamic screen sizes; VGA soft fonts for non-local code pages in fullscreen sessions; Telnet Negotiate About Window Size (NAWS); System Sounds support; VT220 autoprint and protected fields; ISO 2022 character-set designation and invocation. In version 5A(190) and earlier, the screen was updated once per character, resulting in somewhat sluggish terminal performance on high-speed connections. In version 5A(191) it is updated much more efficiently. You can control the updating method with the new command: SET TERMINAL SCREEN-UPDATE { FAST, SMOOTH } [ milliseconds ] (A millisecond is 1/1000 of a second.) The default value is FAST 100. As the names imply, FAST is faster than SMOOTH; SMOOTH is smoother than FAST. The milliseconds parameter specifies how often the screen may be repainted (if necessary). Screen rollback (normally accomplished by using the Page Up and Down keys) is instantaneous, and the maximum number of saved screens is virtually unlimited in the 32-bit version. C-Kermit will use any screen size that OS/2 is capable of producing. Starting with edit 191, you can adjust the size of the screen size in terminal mode from the C-Kermit> prompt by using two built-in commands: C-Kermit> set terminal width 80 C-Kermit> set terminal height 42 The height is the number of lines in the terminal screen, not counting the status line. In windowed sessions, the width can only be 80 in pre-Warp systems, but various heights can be used; under Warp, any combination of width and height with a maximum screen area of 8192 characters can be given. In a fullscreen session, widths may be 40, 80, or 132, and heights may be 24, 42, 49, or 59, or other values supported by your video adapter. Warp is not required. Host-directed switching between 80-column and 132-column mode is supported in fullscreen sessions, and also under Warp in a window, but not in a window in pre-Warp OS/2 releases. Screen size is automatically negotiated on TELNET connections if the TELNET server supports this feature (see the TCP/IP section). The status line and the popup help screens have been totally redesigned to be more informative, and there are more of them. For example, you get a different status line and popup help screen if you are in regular "online mode", or if your screen is rolled back, or if you are composing an accented character. The new \v(keyboard) variable indicates the keyboard model: "88", "101", or "122". Unknown keyboards are reported as 4-digit hexadecimal values. ═══ 4.3.1. Auto Up- and Download ═══ As of edit 190, OS/2 C-Kermit is able to respond automatically to "autoupload", "autodownload", or auto-anything-else directives from the remote computer during CONNECT mode. These directives come in the form of an Application Program Command escape sequence, or APC, when C-Kermit's terminal emulation is ANSI, VT100, VT102, or VT220. The APC is sent by a host application to the terminal emulator, and contains one or more commands to be executed by the terminal emulation program. This mechanism lets the host application software control your communications software, allowing an unprecedented degree of automation and convenience. Good uses for this feature include: 1. automatic communications, protocol, terminal, keyboard, or other setups by the host application; 2. automatic initiation of file transfer by the host application. The form of an APC is: _text\ where "" is ASCII character 27 (Escape), and text is a command or a list of commands separated by commas. The APC sequence was originally defined by Digital Equipment Corporation for its VT300-series and higher terminals. There are two "ends" to an APC operation, and you need to understand how to control each end. Let's call the application that sends an APC escape sequence the "APC sender", and the application that receives it, and which is supposed to execute the commands it contains, the "APC receiver". Any host application can be an APC sender. To send an APC, all it needs to do is display the desired commands on your terminal screen, enclosed in _ and \. C-Kermit 5A(189) (and later) has a command for doing this: APC text where the text is a command (or commands) for the APC receiver. Leading and trailing spaces are removed from the text unless it is enclosed in braces: APC { text } Here's an example that sets OS/2 C-Kermit parameters from UNIX (or VMS) C-Kermit's command line, while OS/2 C-Kermit is in CONNECT mode: C-Kermit> apc set receive packet-length 2000, set window 4 This command causes UNIX C-Kermit to send the following characters to the terminal (i.e. OS/2 C-Kermit's terminal emulator): _set receive packet-length 2000, set window 4\ OS/2 C-Kermit recognizes the APC sequence, extracts the commands from it, and processes them automatically, according to the rules listed below. Here's an example in which you define and then execute a UNIX C-Kermit macro to send a file from UNIX C-Kermit, causing OS/2 C-Kermit to receive it automatically without your having to escape back and type "receive". You do not need to CONNECT again after the transfer is done, either; this too happens automatically. C-Kermit> define autosend apc receive, send \%1 C-Kermit> autosend oofa.txt A macro is used because if you type APC RECEIVE at the UNIX C-Kermit prompt, OS/2 C-Kermit goes immediately into RECEIVE mode and you have no way to give the SEND command to UNIX C-Kermit. Conversely, if you type the SEND command first, UNIX C-Kermit goes into SEND mode, and you have no opportunity to give it an APC command. When the macro (or a TAKE command file) is the source of commands, the "Catch-22" is avoided because the keyboard is out of the picture. The APC receiver can be:  MS-DOS Kermit 3.13 or later  C-Kermit 5A(190) or later for OS/2  C-Kermit 5A(190) for UNIX  C-Kermit 5A(190) for VMS  C-Kermit 5A(190) for OS-9/68000 When one of these Kermit programs is in CONNECT mode, and an APC escape sequence arrives, the commands it contains are executed if: 1. Terminal emulation is VT100, VT102, VT220, VT320, or ANSI, and: 2. SET TERMINAL APC is ON and the commands are not "dangerous", or: 3. SET TERMINAL APC is UNCHECKED. After processing the APC sequence, whether its commands are executed or not, the APC receiver returns to CONNECT mode automatically. The C-Kermit initialization file defines several macros to let you take advantage of the APC feature. They are to be used at the C-Kermit> prompt, when you are accessing C-Kermit through an APC receiver. They include: PCSEND filespec [ as-name ] Sends the file or files from C-Kermit to the "PC" that's on your desk. (Of course, the PC might also be a UNIX workstation, etc). If the does not contain wildcard characters (that is, it is the name of a single file), you can include the optional "as-name" to send it under a different name. The file or files are sent according to C-Kermit's current FILE TYPE setting, text or binary (except in VMS, where VMS C-Kermit determines the file type and transfer automatically for each file). In other words, the PCSEND macro is exactly like the SEND command, except it automatically puts your local Kermit program into RECEIVE mode, and then back into CONNECT mode again when the transfer is complete. This process is sometimes referred to as "autodownloading". PCGET filespec [ as-name ] This tells C-Kermit to get the specified file or files from your "PC". It puts your local Kermit program into server mode, GETs the specified files from it, then sends it a FINISH command and puts it back in CONNECT mode automatically. The transfer type is governed by C-Kermit's current FILE TYPE setting. This process can be called "autouploading". C-Kermit's response to APC sequences is controlled by the following command: SET TERMINAL APC { ON, OFF, UNCHECKED } The default setting is OFF, meaning that C-Kermit ignores APC sequences unless you tell it otherwise. In the OS/2 version, they are harmlessly absorbed and not displayed. To activate the APC feature, use: SET TERMINAL APC ON This allows execution of all commands received in APC sequences except those considered dangerous, such as: PUSH, RUN, !, REDIRECT, DELETE, RENAME, OUTPUT, ENABLE, DISABLE, SCRIPT, and SET TERMINAL APC. With this setting, for example, it should not be possible for someone to send you a "letter bomb" or screen message that contained an APC sequence to execute a command on your computer (because RUN and ! are disabled). The commands allowed by SET TERMINAL APC ON are only the ones which affect Kermit itself, including the initiation of Kermit file transfers. Should you want to enable APC execution of ALL commands, which can be dangerous and is therefore not recommended unless you know exactly what you are doing and have total control over what is sent to your screen by the remote host or service, you can: SET TERMINAL APC UNCHECKED Use UNCHECKED at your own risk. Note that when TERMINAL APC is not OFF, the CONNECT command might run a bit slower than when TERMINAL APC is OFF. ═══ 4.3.2. The SET KEY Command ═══ As of edit 190, OS/2 C-Kermit's key mapping facility uses "Kermit keyboard verbs" rather than scan codes to denote actions that can be mapped to keys. All functions previously available are still available, but rather than being tied to hardwired scan codes, they are tied to \Kverbs. This means:  You can move them anywhere you want.  You can't "lose" them, as you could before if you mapped something else over a sacred key.  That is, NO keys are sacred; no keys are preempted by Kermit in any way that you can't overcome; you can undefine/redefine any and all keys.  Key mapping files now contain descriptive verbs rather than magic numbers as the definitions.  SHOW KEY shows the \Kverb, rather than an obscure numeric cross-reference. Furthermore:  The \Kverbs are totally compatible with MS-DOS Kermit (even if some of the scan codes are not). As of edit 191, OS/2 C-Kermit has a few additional \Kverbs that MS-DOS Kermit does not have, mostly related to the mouse and to various national-language keyboard modes.  You can combine characters, strings, and \Kverbs arbitrarily in a key definition; e.g. you can put two or more verbs on one key. Examples (for the F1 key): set key \315 \161 ; Any single character set key \315 \27b ; Escape and "b" set key \315 Any string ; Any string of ordinary characters set key \315 { Any string } ; String with leading & trailing spaces set key \315 \KupArr ; Up-Arrow set key \315 \KupArr\KrtArr ; Up-Arrow and Right-Arrow set key \315 abc\{KupArr}xyz ; "abc", then Up-Arrow, then "xyz" set key \315 abc\KupArr xyz ; "abc", then Up-Arrow, then " xyz" set key \315 \v(time) ; Time when SET KEY was executed (constant) set key \315 \\v(time) ; Time when key is pressed (variable) Braces are not required except to resolve ambiguity or to preserve leading and/or trailing spaces in the definition. Note that \\v(name) is a special case. Other backslash quantities cannot have their evaluation postponed by "double quoting" in this way; they are simply emitted literally, e.g. "set key \315 \\%a" causes F1 to send "\%a". The new command: SET KEY CLEAR restores all default key definitions (listed below). IMPORTANT: The key-mapping commands and command files of C-Kermit 5A(188) and 5A(189) don't work any more, and the instructions here supersede the ones given in the OS/2 appendix of Using C-Kermit. In particular, the CKOVTK.INI VT220 key mapping command file is superseded by the new CKOVTK2.INI file. User-defined macros can also be assigned to keys by using their names as kverbs. Example: define download receive, connect set key \417 \Kdownload This example puts the act of receiving a file from a remote Kermit that has already been told to send it on a "hot key", in this case Alt-Page-Down on the PC. C-Kermit will not automatically reenter terminal emulation upon completion of the macro unless the macro includes a CONNECT command, as in the example above. Keyboard verbs are of the form \Kname, where "name" is the name of the verb. A keyboard verb may be written \Kname, or \K{name}. The latter form is needed when the name is adjacent to other text, for example: set key \315 \K{decF1}0 ═══ 4.3.2.1. Keyboard Verbs ═══ The following keyboard verbs are available. Capitalization does not matter: \KupArr Send what the DEC Up Arrow key sends \KdnArr Send what the DEC Down Arrow key sends \KrtArr Send what the DEC Right Arrow key sends \KlfArr Send what the DEC Left Arrow key sends \Kgold Send what the DEC Gold key sends \Kpf1 Send what the DEC PF1 key sends (same as Gold) \Kpf2 Send what the DEC PF2 key sends \Kpf3 Send what the DEC PF3 key sends \Kpf4 Send what the DEC PF4 key sends \Kkp0 Send what the DEC Numeric Keypad 0 key sends \Kkp1 Send what the DEC Numeric Keypad 1 key sends \Kkp2 Send what the DEC Numeric Keypad 2 key sends \Kkp3 Send what the DEC Numeric Keypad 3 key sends \Kkp4 Send what the DEC Numeric Keypad 4 key sends \Kkp5 Send what the DEC Numeric Keypad 5 key sends \Kkp6 Send what the DEC Numeric Keypad 6 key sends \Kkp7 Send what the DEC Numeric Keypad 7 key sends \Kkp8 Send what the DEC Numeric Keypad 8 key sends \Kkp9 Send what the DEC Numeric Keypad 9 key sends \KkpComa Send what the DEC Numeric Keypad comma (,) key sends \KkpMinus Send what the DEC Numeric Keypad minus (-) key sends \KkpDot Send what the DEC Numeric Keypad period (.) key sends \KkpEnter Send what the DEC Numeric Keypad Enter key sends \KdecF6 Send what the DEC F6 key sends \KdecF7 Send what the DEC F7 key sends \KdecF8 Send what the DEC F8 key sends \KdecF9 Send what the DEC F9 key sends \KdecF10 Send what the DEC F10 key sends \KdecF11 Send what the DEC F11 key sends \KdecF12 Send what the DEC F12 key sends \KdecF13 Send what the DEC F13 key sends \KdecF14 Send what the DEC F14 key sends \KdecF15 Send what the DEC F15 key sends \KdecHelp Send what the DEC Help key sends (same as F15) \KdecF16 Send what the DEC F16 key sends \KdecDo Send what the DEC Do key sends (same as F16) \KdecF17 Send what the DEC F17 key sends \KdecF18 Send what the DEC F18 key sends \KdecF19 Send what the DEC F19 key sends \KdecF20 Send what the DEC F20 key sends \KdecFind Send what the DEC Find key sends \KdecInsert Send what the DEC Insert key sends \KdecRemove Send what the DEC Remove key sends \KdecSelect Send what the DEC Select key sends \KdecPrev Send what the DEC Previous Screen key sends \KdecNext Send what the DEC Next Screen key sends The following Kverbs are actions that may be performed during a Connect mode session: \Kbreak Send a BREAK signal. For serial connections, this is a 250 millisecond spacing condition. For TELNET conditions, this is a TELNET BREAK command. \Kclearscreen Clear the terminal screen by rolling it into the scrollback buffer (edit 191). \Kdebug Toggle debugging \Kdos Synonym for \Kos2. \Kdump Print screen or marked text, or copy it to a file, depending on SET PRINTER. When assigned to a mouse DRAG event \Kdump provides a simplified drag to select text and copy to printer (or file) operation. \Kexit Save the current terminal screen, exit terminal emulator, return to command prompt, but do not break the connection. \KflipScn Flip screen video normal/reverse \Khangup Hang up the connection \Khelp Pop-up help screen \KholdScrn Hold screen \Kignore Ignore this key, don't even beep \KkbEnglish Enter English keyboard mode. \KkbHebrew Enter Hebrew keyboard mode (see Hebrew Terminal Emulation). \KkbRussian Enter Russian keyboard mode (edit 191) (see Russian Terminal Emulation). \KlBreak Send a Long BREAK (1.5 msec serial, or TELNET BREAK) \Klogoff Deactivate logging to the current session log file but do not close the file. \Klogon Activate logging of session to a file. If a session log file is not currently open, a session log file named "session.log" is created in the current directory, otherwise the current session log is used. \Knull Send a NUL (binary 0) character \Kos2 Push to OS/2 \Kpaste Copy text from the PM clipboard to the host (edit 191). \KprintFF Send a form feed to the printer \KprtAuto Toggle DEC auto-print mode. Print current line when cursor moves off it. \KprtCtrl Toggle route-incoming-bytes-to-printer on and off. \KprtScn Synonym for \KprtCtrl \Kreset Reset the terminal emulator. \Ktn_ayt Send TELNET Are You There (AYT) \Ktn_ip Send TELNET Interrupt Process (IP) The following Kverbs may be used to manipulate the screen rollback buffer for viewing past history or during mark mode to select text: \KdnOne Screen rollback: Down one line \KdnScn Screen rollback: Down one screen \KupOne Screen rollback: Up one line \KupScn Screen rollback: Up one screen \KendScn Screen rollback: Latest (bottom, newest) screen \KhomScn Screen rollback: Oldest (top) screen in buffer The following "mark mode" verbs were added in edit 191. Read about mark mode in Using Mark Mode from the Keyboard. \Kmarkstart Enter mark mode if it is not active. In mark mode, clears all marked text and begins marking from the current location. \Kmarkcancel Cancel mark mode. \Kmarkcopyclip Copies marked text to the PM clipboard. When assigned to a mouse DRAG event \Kmarkcopyclip provides a simplified drag to select text and copy to clipboard operation. \Kmarkcopyhost Copies marked text directly to the host. When assigned to a mouse DRAG event \Kmarkcopyhost provides a simplified drag to select text and copy direct to host operation. The following "mouse" verbs were added in edit 191: \Kmousecurpos Send the definitions assigned to the grey arrow keys to move the terminal cursor from its present position to where the mouse cursor is (effective only when assigned to a mouse event). More about this in Using the Mouse. \Kmousemark Allows the mouse to be used to enter mark mode and select text without performing a copy operation on the marked text. (effective only when assigned to a mouse event). More about this in Using the Mouse. The SHOW KVERBS command lists all the \Kverbs in Kermit's repertoire. ═══ 4.3.2.2. Default Key Mapping ═══ The default mapping, which applies when C-Kermit starts up, and which is restored whenever you give a SET KEY CLEAR command, is as follows. It maps all of the VT100/VT102 keys to PC keys, but none of the keys that are unique to the VT220-and-higher keyboards (i.e. F6-F20 and the editing keys). For a complete VT220 mapping, you can execute the CKOVTK2.INI command file. The default mapping should apply to almost any PC keyboard, and does not require the gray keypads. Note: The keyboard is in "English" mode by default, and returns to English mode upon reset ("English" means Kermit's Russian and Hebrew keyboard modes are not active, and the keyboard is treated "as-is"). Verb IBM Key \KholdScrn Scroll Lock Alternate (with Num Lock off) \KupArr Gray keypad up arrow and Numeric keypad up arrow \KdnArr Gray keypad down arrow and Numeric keypad down arrow \KrtArr Gray keypad right arrow and Numeric keypad right arrow \KlfArr Gray keypad left arrow and Numeric keypad left arrow \KupScn Gray Page Up and Numeric keypad PgUp \KupOne Ctrl Gray Page Up and Numeric keypad Ctrl-PgUp \KdnScn Page Gray Down and Numeric keypad PgDn \KdnOne Ctrl Gray Page Down and Numeric keypad Ctrl-PgUp \KhomScn Gray Home and Numeric keypad Home \KendScn Gray End and Numeric keypad End \Kpf1 F1 \Kpf2 F2 \Kpf3 F3 \Kpf4 F4 \Kkp0 Alt-0, Top Rank \Kkp1 Alt-1, Top Rank \Kkp2 Alt-2, Top Rank \Kkp3 Alt-3, Top Rank \Kkp4 Alt-4, Top Rank \Kkp5 Alt-5, Top Rank \Kkp6 Alt-6, Top Rank \Kkp7 Alt-7, Top Rank \Kkp8 Alt-8, Top Rank \Kkp9 Alt-9, Top Rank \KkpMinus Alt-Minus, Top Rank \KkpPeriod Alt-Period, Main Keypad \KkpComa Alt-Comma, Main Keypad \KkpEnter Alt-Enter, Main Keypad \Kreset Alt-r \Kbreak Alt-b \Kexit Alt-x \KlBreak Alt-l \Kdump Alt-f \Kflipscn Alt-v \Kdebug Alt-d \Khelp Alt-h \Khangup Alt-u \Kmarkstart Ctrl-F1 \Kmarkcancel Ctrl-F2 \Kmarkcopyclip Gray Ctrl-Insert \Kmarkcopyhost Gray Ctrl-Shift-Insert \Kpaste Gray Shift-Insert Other default assignments: Keypad Del sends DEL (127) Gray Delete sends DEL (127) Backspace sends DEL (127) Ctrl-Backspace sends DEL (127) Alt-Backspace sends Backspace (Ctrl-H, 8) Backtab (Shift Tab) sends Backspace (Ctrl-H, 8) Ctrl-2 sends NUL (0) Ctrl-Space Bar sends NUL (0) Enter sends carriage return (CR, 13) Ctrl-Enter sends linefeed (LF, 10) If you want the Backspace key to send an ASCII Backspace (Ctrl-H) character instead of DEL, which is required by some hosts and applications, tell C-Kermit to: SET KEY \127 \8 The Alt key may be used with the numeric keypad to generate accented and special characters. Hold down the Alt key and press 3 keypad digits representing the decimal code of the desired character in the current PC code page, for example Alt-161 sends lowercase letter i with acute accent in CP437 or 850. Some users of the EMACS text editor like use the Alt key as a "Meta" key. C-Kermit comes with an EMACSKEY.INI file that sets this up for you. Other keys that have nothing mapped to them with SET KEY send themselves (e.g. a, Shift-a, Ctrl-A, etc), or, if nothing is assigned and there is no default value (e.g. for Alt-F6), nothing is sent and a beep is sounded (note: \Kignore can be assigned to suppress the beep). Key names that appear in the status line and popup help screens are in "English", giving the keytop associated with a particular scan code on the USA keyboard. ═══ 4.3.3. Arrow Keys ═══ The PC arrow keys are mapped, by default, to send what DEC VT-terminal arrow keys send. The DEC arrow keys are known as the "cursor keypad", and these keys always transmit escape sequences on a DEC terminal. The exact sequences depend on what "mode" the terminal and keypad are in: Mode............................ Key Application Cursor VT52 Kermit Verb PC Scan code Up Arrow ESC O A ESC [ A ESC A \KupArr \584 Down Arrow ESC O B ESC [ B ESC B \KdnArr \592 Right Arrow ESC O C ESC [ C ESC C \KrtArr \589 Left Arrow ESC O D ESC [ D ESC D \KlfArr \587 The first two modes can be set by either the host (ESC [ ? 1 h / l) or by the SET TERMINAL ARROW-KEYS { APPLICATION, CURSOR } command. The VT52 mode can be set via ESC [ ? 2 l and can be reset via ESC [ ? 2 h or by ESC <, and of course the terminal type can also be controlled by Kermit's SET TERMINAL TYPE command. The default (startup) arrow-key mode is CURSOR. Of course, you can assign any other sequences you want to the arrow keys. For example, to assign EMACS commands to them: set key \584 \16 ; Ctrl-P to Up Arrow set key \592 \14 ; Ctrl-N to Down Arrow set key \589 \6 ; Ctrl-F to Right Arrow set key \587 \2 ; Ctrl-B to Left Arrow Whatever definitions you have assigned to the arrow keys are used by the mouse-directored terminal cursor feature. ═══ 4.3.4. The Numeric Keypad ═══ Numeric (auxilliary) keypad keys are similar to arrow keys, in that they, too, send different sequences depending on the mode and the emulation. Note that we are talking here about the DEC numeric keypad, which is slightly different from the IBM one (the DEC keypad has different keytop labels, and one additional key). VT1xx/2xx Mode....... VT52 Mode........... DEC Key Application Numeric Application Numeric Kermit Verb PF1 (Gold) ESC O P ESC O P ESC P ESC P \Kpf1,\Kgold PF2 ESC O Q ESC O Q ESC Q ESC Q \Kpf2 PF3 ESC O R ESC O R ESC R ESC R \Kpf3 PF4 ESC O S ESC O S ESC S ESC S \Kpf4 0 ESC O p 0 ESC ? p 0 \Kkp0 1 ESC O q 1 ESC ? q 1 \Kkp1 2 ESC O r 2 ESC ? r 2 \Kkp2 3 ESC O s 3 ESC ? s 3 \Kkp3 4 ESC O t 4 ESC ? t 4 \Kkp4 5 ESC O u 5 ESC ? u 5 \Kkp5 6 ESC O v 6 ESC ? v 6 \Kkp6 7 ESC O w 7 ESC ? w 7 \Kkp7 8 ESC O x 8 ESC ? x 8 \Kkp8 9 ESC O y 9 ESC ? y 9 \Kkp9 - ESC O m - ESC ? m - \KkpMinus , ESC O l , ESC ? l , \KkpComa . ESC O n . ESC ? n . \KkpDot Enter ESC O M CR or CRLF ESC ? M CR or CRLF \KkpEnter The Enter key Numeric-Mode assignment depends on whether the terminal (emulator) is in "ANSI Line Mode", which is controlled by the host via ESC [ 20 h (Line Mode) and ESC [ 20 l (small letter el, No Line Mode), or by Kermit's SET TERMINAL NEWLINE-MODE command. By default, the emulator is not in newline mode, and sends only Carriage Return (Ctrl-M, ASCII 13) when you press the Return or Enter key. The keypad mode is controlled by the host: ESC = puts it in Application Mode; ESC > puts it in Numeric Mode. Or you can control it yourself with the SET TERMINAL KEYPAD-MODE command. The default (startup) keypad state is Numeric. Note: The PC numeric keypad keys generate different scan codes, depending on the Num Lock state. Please read the CKOVTK2.INI file for details. ═══ 4.3.5. The Compose Key ═══ As of edit 190, characters that exist in Latin-1-like (Western European) character sets can be entered using Compose-key sequences. Press the Compose key (verb \Kcompose, assigned by default to Alt-c), then two more keys to produce the desired character, for example ' and A to send A-acute. Don't hold the \Kcompose key down while typing the two other keys - it does not work like a shift key. You can watch your progress in the status line, and if you push the help key (Alt-h by default) while a compose sequence is active, you get a special help screen. If you want to cancel a compose-key sequence, just press the space bar. If you enter a valid sequence, it is translated according to the terminal character-set and transmitted. Below is a complete listing of the valid compose-key sequences; if you enter a character combination that is not in this list, C-Kermit beeps and ignores it. If you press the Compose key during Cyrillic or Hebrew terminal emulation, OS/2 C-Kermit just beeps (use the special keyboard modes that are supplied for entering Cyrillic and Hebrew characters). Notice that case (shift key) matters for letters, but not for most symbols, and that in most cases, the order of the two characters doesn't matter. The compose sequences supported by C-Kermit are the same as those used by DEC US-model VT220 terminals in "ISO" mode. There are no "dead keys". The full repertoire listed below is available only if your OS/2 code page is 850. If you are using another code page (437, 852, etc), some of these characters (the ones that are not in your code page) might show up as question marks. Letters... A ` A grave a ` a grave ` A A grave ` a a grave A ' A acute a ' a acute ' A A acute ' a a acute A ^ A circumflex a ^ a circumflex ^ A A circumflex ^ a a circumflex A ~ A tilde a ~ a tilde ~ A A tilde ~ a a tilde A " A diaeresis a " a diaeresis " A A diaeresis " a a diaeresis A * A ring above a * a ring above * A A ring above * a a ring above A E A with E a e a with e C , C Cedilla c , c cedilla , C C Cedilla , c c cedilla E ` E grave e ` e grave ` E E grave ` e e grave E ' E acute e ' e acute ' E E acute ' e e acute E ^ E circumflex e ^ e circumflex ^ E E circumflex ^ e e circumflex E " E diaeresis e " e diaeresis " E E diaeresis " e e diaeresis I ` I grave i ` i grave ` I I grave ` i i grave I ' I acute i ' i acute ' I I acute ' i i acute I ^ I circumflex i ^ i circumflex ^ I I circumflex ^ i i circumflex I " I diaeresis i " i diaeresis " I I diaeresis " i i diaeresis - D Icelandic Eth - d Icelandic eth D - Icelandic Eth d - Icelandic eth H T Icelandic Thorn h t Icelandic thorn T H Icelandic Thorn t h Icelandic thorn N ~ N tilde n ~ n tilde ~ N N tilde ~ n n tilde O ` O grave o ` o grave ` O O grave ` o o grave O ' O acute o ' o acute ' O O acute ' o o acute O ^ O circumflex o ^ o circumflex ^ O O circumflex ^ o o circumflex O ~ O tilde o ~ o tilde ~ O O tilde ~ o o tilde O " O diaeresis o " o diaeresis " O O diaeresis " o o diaeresis O / O oblique stroke o / o oblique stroke / O O oblique stroke / o o oblique stroke U ` U grave u ` u grave ` U U grave ` u u grave U ' U acute u ' u acute ' U U acute ' u u acute U ^ U circumflex u ^ u circumflex ^ U U circumflex ^ u u circumflex U " U diaeresis u " u diaeresis " U U diaeresis " u u diaeresis Y ' Y acute y ' y acute ' Y Y acute ' y y acute s s German sharp s y " y diaeresis Symbols... ' ' Acute accent U / Micro sign A A At sign u / Micro sign a a At sign . ^ Middle dot / / Backslash X X Multiplication sign / < Backslash x x Multiplication sign | | Broken bar - , Not sign , , Cedilla + + Number sign C / Cent sign S ! Paragraph sign c / Cent sign S 0 Paragraph sign C 0 Copyright sign S O Paragraph sign C O Copyright sign s ! Paragraph sign c 0 Copyright sign s 0 Paragraph sign c o Copyright sign s o Paragraph sign X 0 Currency sign P ! Pilcrow sign X O Currency sign p ! Pilcrow sign x 0 Currency sign + - Plus or minus sign x o Currency sign L - Pound sterling sign 0 ^ Degree sign l - Pound sterling sign - : Division sign R O Registered Trademark A _ Feminine ordinal r o Registered Trademark a _ Feminine ordinal > > Right angle quotation 1 2 Fraction one half ) - Right brace 1 4 Fraction one quarter ) ) Right bracket ! ! Inverted exclamation - - Soft hyphen ? ? Inverted question mark 1 ^ Superscript 1 < < Left angle quotation 2 ^ Superscript 2 ( - Left brace 3 ^ Superscript 3 ( ( Left bracket / ^ Vertical bar - ^ Macron Y - Yen sign O _ Masculine ordinal y - Yen sign o _ Masculine ordinal ═══ 4.3.6. The SET TERMINAL Command ═══ The following SET TERMINAL and related commands have been added or modified since version 5A(188): SET TERMINAL ANSWERBACK { OFF, ON } Controls whether or not OS/2 C-Kermit's terminal emulator treats incoming Ctrl-E characters as ENQ requests or simply ignores them. ON means ENQ causes C-Kermit to send an Answerback message, which is "OS/2 C-Kermit" in edit 189 & earlier, and in edit 189 is "OS/2 C-Kermit ", where is the numeric C-Kermit program version number, e.g. 501189 for version 5A(189), and is a carriage return. OFF, the default, means C-Kermit ignores Ctrl-E's. In edit 190 and later, the terminal emulation was added to the answerback string, e.g. "OS/2 C-Kermit 501191 VT220". SET TERMINAL CHARACTER-SET { HEBREW-ISO, HEBREW-7, CP862, HPROMAN8 } ... The Hebrew and HP character sets were added in edit 190. Type SET TERMINAL CHAR ? to see a complete list. In edit 191, the default "local character-set" is your SET TERMINAL FONT value, if any (see below), or if none, your current code page. SET TERMINAL CHARACTER-SET remote-cset [ local-cset [ G0 G1 G2 G3 ] ] In edit 191, it is possible to designate character sets to specific tables, as described in ISO standards 2022 and 4873. Normally there is no reason to do this; you would only specify the Gn tables to undo some arrangement that was caused by a malfunctioning host application or by communication line noise, or to accommodate some unusual combination of character sets. If you don't specify the Gn's, then if the remote-cset is a 7-bit set, it is designated to all four of G0 through Gn. If it is an 8-bit set, then ASCII (ISO 646 International Reference Version) is designated to G0 and the right half of the specified set is designated to all three of G1 through G3. SET TERMINAL CODE-PAGE number Changes the "hardware" code page (video adapter and keyboard character set) used by Kermit and any processes that Kermit creates. Typical code page numbers are 437 (original US code page) and 850 (multinational code page). Use SHOW TERMINAL to display the current code page and to list the code pages that are available for use on your PC. OS/2 allows only two code pages to be prepared at once; this is done via the CODEPAGE statement in CONFIG.SYS, for example "CODEPAGE=437,850". If you try to prepare a code page that is not supplied with your OS/2 system (for example, Hebrew code page 862 on a US system) you will get an error message when the system starts up. You might be able to get around this by opening your System Setup folder, executing Selective Install, and changing your Country. But note that "Code pages 862 and 864 [Hebrew and Arabic] are supported with a country supplement available only in certain countries", and "Code pages 932, 938, 944, and 948 [Japanese, Chinese, and Korean] are supported only with the DBCS version of the OS/2 operating system on DCBS hardware" [from OS/2 "help codepage"]. Also see SET TERMINAL FONT. SET TERMINAL COLOR { SELECTION, ... } foreground background Colors to be used for selected text in mark-and-copy operations. SET TERMINAL FONT { CP437, CP850, CP852, CP862, CP866, DEFAULT } Loads a "soft font" corresponding to the named code page into your video adapter. Works only in fullscreen sessions, and works best with 24-line terminal screens; might or might not work with other sizes, depending on your video adapter. This command, new to edit 191, allows "code pages" to be loaded that are not furnished with, or prepared in, your OS/2 system, particularly CP852 (for East European languages like Czech, Polish, Hungarian, Romanian); CP862 (Hebrew); and CP866 (Cyrillic for Russian, Belorussian, and Ukrainian). The fonts come with C-Kermit in the PCFONTS.DLL library. DEFAULT means to reload the code page that was in effect at the time Kermit started. Fonts loaded in this manner are visible only on Kermit's terminal screen, not the command screen or in any other session. See the sections on Hebrew and Russian terminal emulation for more information. SET TERMINAL HEIGHT number Number of lines to use in the terminal (CONNECT) screen, not counting the status line. The supported heights depend on your display adapter, the OS/2 version, and whether you are in a fullscreen session or a window. (The default value is the screen size of the session at startup.) SET TERMINAL OUTPUT-PACING milliseconds Tells how many milliseconds to pause between sending each character to the host during CONNECT mode. This applies to keys that you type, function key escape sequences, key macros, and (most importantly) to material that is pasted into the terminal window, but ONLY ON SERIAL CONNECTIONS. On network connections, application-level pacing is not needed. Use this command if you see TRANSMISSION BLOCKED messages in the status line when entering data (which usually indicate serial port hardware buffer overruns) or if data is lost when pasting into the terminal screen. The default OUTPUT-PACING value is 0 (none). -1 means: A 50 millisecond pause between the characters generated by function keys, arrow keys, and keys that have character strings assigned to them via SET KEY, but no pausing otherwise. Any number greater than zero applies to ALL characters sent to the host during CONNECT mode on a serial connection. The maximum value is 10000, or 10 seconds. SET TERMINAL ROLL-MODE { INSERT, OVERWRITE } This controls what happens to incoming data when the screen is rolled back. INSERT (the default) means that incoming data is inserted in its proper plade in the session, usually at the end (bottom). OVERWRITE means that incoming data writes over the screen that is showing, even if it is an "old" screen. In either case, you can communicate with the host by typing, pasting, etc, while the screen is rolled back. SET TERMINAL SCREEN-UPDATE { FAST, SMOOTH } [ milliseconds ] Selects a method and frequency for screen updates. The default method is FAST, the default frequency is every 100 milliseconds, i.e. 10 times per second. SET TERMINAL SCROLLBACK number Size of terminal scrollback buffer. number is how many screen lines to save including the current terminal screen. The default is 2000. The minimum value is 255 and the maximum is 2,000,000. Every 1024 lines in scrollback buffer size results in a potential increase in the size of the SWAPPER.DAT file of 512k. SET TERMINAL TYPE { ANSI, VT52, VT100, VT102, VT220 } Allows selection of the terminal emulations listed. VT220, VT100, and ANSI are new to edit 190. For the DEC VT family of emulations, Kermit identifies itself appropriately in response to DECID or DA; SHOW TERMINAL displays current type and ID string. VT100 is exactly like VT102, but without character insert/delete. 8-bit controls like CSI (= 155) are accepted in VT220 mode, but you must SET TERMINAL BYTESIZE 8 (and, of course SET PARITY NONE) in order to use them, and you must also set your terminal character set to something other than TRANSPARENT or any of the IBM code pages or other sets that put graphic characters in the C1 area. C-Kermit will also send C1 controls (e.g. when you push the arrow keys) if these conditions are met AND the host has commanded it to do so. The default emulation is VT220. VT220 emulation is almost fully implemented (lacking mainly: downline-loadable user-defined keys, downline-loadable fonts), and works well with most VMS applications, such as EVE (EDIT/TPU). All-In-1, and DECnotes. NB: To use VT220 emulation with VMS applications, you must either: (a) tell C-Kermit to SET TERMINAL BYTESIZE 8, or (b) tell VMS to SET TERM /NOEIGHT. ANSI is so-called ANSI terminal emulation, used with BBS's, a subset of VT100 with several other other features added (color, etc), using the 8-bit IBM Code Page 437 characters for box- and line-drawing. It is approximately equivalent to the OS/2 console driver and to DOS ANSI.SYS. Colors are automatically set to black on white, TERMINAL BYTESIZE is automatically set to 8, TERMINAL CHARACTER-SET is forced to TRANSPARENT, and your code page is set to CP437 (provided you have CP437 prepared; otherwise your code page is not changed). If you SET TERMINAL TYPE anything-but-ANSI after having SET TERMINAL TYPE ANSI, your previous code page, TERMINAL BYTESIZE, COLOR, and CHARACTER-SET are restored. SET TERMINAL TRANSMIT-TIMEOUT seconds During CONNECT mode (terminal emulation), if Kermit can't transmit your keystrokes for some reason, it puts up a special status line saying TRANSMISSION BLOCKED, and then shows a countdown timer. When the countdown timer expires, Kermit returns to the prompt. This will happen, for example, if you are using RTS/CTS flow control with a modem, and the modem turns off its CTS signal (e.g. during retraining). The countdown timer is set to 15 seconds by default, but you can change it with 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. SET TERMINAL WIDTH number Number of columns to use in the terminal (CONNECT) screen. The supported widths depend on your display adapter, the OS/2 version, and whether you are in a fullscreen session or a window. 80 is normal, 132 is supported by most VT100/220 applications, 40 can be used to get a bigger typeface. The default width is the screen width of the session at startup. SET TERMINAL DEBUG { ON, OFF } Also known as SET DEBUG SESSION. As of edit 190, this command can be used to turn OS/2 C-Kermit's CONNECT command into a "software line analyzer" to watch exactly what characters (or other information) is being received, and also as a TELNET protocol analyzer:  TELNET negotiations are written out in highlighted words  C0 control characters (0 - 31) are displayed as the corresponding letter (e.g. A for Ctrl-A), but using the underline-simulation color (SET TERMINAL COLOR UNDERLINE foreground background). Carriage-Return/Linefeed pairs are shown as MJ in underline color, but also start a new line on the screen for readability.  DEL (127) is displayed as a question mark with underline coloring (?).  C1 control characters (128 - 159) are displayed literally in the current code page, but using underline color  Escape sequences are shown in reverse video.  All other characters are shown as is. This means that characters 32-126 are shown as normal ASCII graphics; 160-255 are shown as 8-bit graphics in the current code page. Note: Incoming 8th bits are still stripped if PARITY is not NONE or if TERMINAL BYTESIZE is not 8. If you want to see parity bits, SET TERMINAL BYTESIZE 8, SET PARITY NONE. Debug screens can be rolled back for quiet contemplation, and C-Kermit's Print-Screen feature (Alt-P or F) and copy-and-paste features can be used to record terminal debugging screens (even rolled-back ones) on the printer or in a disk file, but, of course, the colors and highlighting are lost. The session debugging feature can be toggled on and off during terminal emulation via Alt-D (\Kdebug), and the status is shown in the terminal-type field of the status line ("DEBUG" replaces "VT102" or "VT52"). ═══ 4.3.7. Using the Mouse ═══ Mouse support was added in edit 190 and then completely overhauled in edit 191. The original mouse functions were copy-and-paste and terminal cursor steering. In edit 191, these same features are assigned to the mouse by default, but:  Text selection can now span the entire virtual screen, including scrollback.  You can reassign these functions to different mouse events.  You can assign them to keys.  You can assign keyboard verbs, macros, or text to mouse events. C-Kermit's mouse actions all take place within the terminal screen, and they are independent of the mouse actions in the OS/2 Window System Menu (Mark, Copy, Paste, etc), which may also be used. The mouse is enabled by default in edit 191. The following command controls whether the mouse is used in the terminal window: SET MOUSE ACTIVATE { ON, OFF } So if you want the mouse to be ignored by C-Kermit (but still usable in the normal OS/2 way), tell C-Kermit to SET MOUSE ACTIVATE OFF. When the mouse is activated, you can use it to:  Mark text  Mark and copy text directly to the host  Mark and copy text to the OS/2 clipboard  Paste from the clipboard to the host  Position the terminal cursor  Transmit a text string  Execute any Kverb or macro definition C-Kermit supports three types of mouse actions: Click, Double-Click, and Drag. All drag operations activate mark mode and start the selection of text. Text is marked "word processor" style, rather than rectangularly, so what you see is what you get. (Blank lines between consecutive marked paragraphs don't show up as marked, but they are.) If you don't like the colors used for displaying marked text, you can change them with the new command: SET TERMINAL COLOR SELECTION foreground background The color names are the same as for all the other SET TERMINAL COLOR commands. As shipped, C-Kermit has the mouse set up as follows: Copy to Clipboard Press Button 1 and hold. Drag the mouse to mark the text. You can push the mouse against the top of the screen to force the screen to scroll back, thus allowing you to mark any contiguous block of text. Release Button 1 and the selected text is copied to the OS/2 Clipboard, and the highlighting goes away. Copy to Host This works just like Copy to Clipboard, except you have to hold down the Ctrl key until after the mouse button is released. Instead of copying the selected text to the Clipboard, Kermit sends it directly to the host when you release the mouse button. Paste To Host Double-Click Button 2. Text in the PM Clipboard is copied to the keyboard buffer (if it was placed in the PM Clipboard by C-Kermit or any other application that allocates its shared memory objects as "GETable") and sent to the host. Terminal Cursor Positioning Double-Click Button 1. Kermit tries to get the host application to move the terminal cursor to where the mouse cursor is by sending the appropriate number of arrow-key sequences. All copy operations strip trailing spaces from the end of each marked line. All "pastes" strip the line terminator from the last (or only) line. Mouse-directed cursor movements send whatever the arrow keys would have sent when pressed the number of times needed to move the terminal cursor to the mouse cursor location. By default, these are the VT terminal arrow key sequences, according to the current cursor keypad mode. If you redefine the arrow keys to send something else (e.g. EMACS or VI up/down/left/right commands), then the mouse will send those instead. Arrow key sequences, whether sent by pressing the arrow keys or with the mouse, only have the desired effect if the host application software understands them. ═══ 4.3.7.1. Reassigning Mouse Actions ═══ The following verbs are used to accomplish the functions that are assigned to mouse actions by default. They are discussed in somewhat greater detail in Using Mark Mode from the Keyboard. \KMarkCopyClip (drag button 1) Marks and copies text to the Clipboard. \Kpaste (double-click button 2) Copy from Clipboard to host. \KMarkCopyHost (Ctrl-drag button 1) Marks and copies text directly to the host. \KDump (no default assignment) Marks and copies text to the SET PRINTER device or file. \KMouseMark (no default assignment) Marks text without copying it anywhere. \KMouseCurPos (double-click button 1) This is the mouse-directed-terminal-cursor feature. You can use the new command: SET MOUSE BUTTON number key action [ text ] to change the mouse assignments, or to assign anything at all to a mouse event, anything that you could assign with SET KEY to a key or key combination: a character or string to be sent to the host, a keyboard verb (other than the keyboard-specific mark-mode verbs), execution of a C-Kermit macro, or any combination of these. The number is the mouse button number, 1, 2, or 3. The key field specifies any key modifiers: ALT, ALT-SHIFT, CTRL, CTRL-ALT, CTRL-ALT-SHIFT, CTRL-SHIFT, NONE, or SHIFT. The action field species the type of mouse action: CLICK, DRAG, or DOUBLE-CLICK. The text is what you are assigning to the given mouse action. It has exactly the same properties as the text from the SET KEY command. If the text is omitted, any previous assignment is removed and the given mouse event will be ignored. Examples: SET MOUSE BUTTON 1 NONE DOUBLE \KMouseCurPos SET MOU B 2 ALT CLICK help\13 ; sends "help" command to the host. DRAG actions enter mark mode and select text. The only verbs that you should assign to a drag action are \KMouseCopyHost, \KMouseCopyClip, and \KMouseDump. Note: You should be careful what you assign to single-click actions, since they are executed whenever you use the mouse to click on the Kermit terminal screen to bring it from the background to the foreground. You can use the new command: SHOW MOUSE to check the activation status of the mouse and see what mouse events have definitions assigned to them. SET MOUSE CLEAR restores all mouse event definitions to their default state. ═══ 4.3.7.2. Using the OS/2 PM Clipboard ═══ As noted elsewhere, text can normally be pasted from the PM clipboard only if the application that put it there did so in a certain way, i.e. as a "GETable" shared memory object. But not all applications do this. In the UTIL subdirectory of your OS/2 C-Kermit directory, you will find a program called CKOCLIP.EXE, the OS/2 C-Kermit PM Clipboard Server. CKOCLIP lets you paste any text at all from the Clipboard into C-Kermit's CONNECT screen via the \Kpaste verb. See OS/2 C-Kermit PM Clipboard Server for further information. ═══ 4.3.8. Using Mark Mode from the Keyboard ═══ Mark mode is new to edit 191. It gives the keyboard-only user a means of marking and copying text that was restricted to users of the mouse in edit 190. Mark mode is more powerful and flexible than the copy-and-paste feature of edit 190, allowing you to select arbitrary sized portions of text from anywhere within the current screen or the scrollback region. Marked text can be copied, transmitted, or printed. Each of the mark-mode actions - copy to clipboard, copy to host, copy to file - has a keyboard verb associated with it. Marking and copying can be done entirely with keystrokes and no mouse, using the following \Kverbs (the default key assignment is shown in parentheses): \KMarkStart (Ctrl-F1) First press enters mark mode; second press starts marking text from the current cursor position. Additional presses clear all marked text and start marking text from the current cursor position. \KMarkCopyClip (Ctrl-Gray-Insert) Copies all marked text to the PM Clipboard. \KMarkCopyHost (Ctrl-Shift-Gray-Insert) Copies all marked text directly to the host. \KMarkCancel (Ctrl-F2) Cancels mark mode without copying anything. \KDump (Alt-p) This is the regular \Kdump verb. When invoked during mark mode, i.e. while a selection is active, the selection (marked text) is dumped to the SET PRINTER device or file. \Kpaste (Shift-Gray-Insert) Pastes (sends) text from the Clipboard to the host. You can reassign these verbs to any other keys or key combinations in the normal manner, using the SET KEY command. While in mark mode all of the scrollback and arrow keyboard verbs are active allowing you to select text a line at a time, a page at a time, or even the entire rollback buffer in one shot. Here, for example, is a key definition to select all text from the top of the rollback buffer to the bottom of the active screen ("select all"): set key \315 \Kmarkstart\Kend\Kmarkstart\Khome ═══ 4.3.9. Printing While in CONNECT Mode ═══ OS/2 C-Kermit offers the following printing features:  The PRINT command works (if you have a printer).  SET PRINTER filename allows transparent-print, autoprint, and \Kdump 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 is running in a fullscreen session, Print-Screen prints a text copy of the display; 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 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 verb, \Kdump, which can be assigned to any key.  In edit 191, you can send the current selection in "mark mode" to the printer.  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 (controller) print operations work correctly in the 32-bit version.  Host-initiated auto print operations work correctly in the 32-bit version as of version 5A(191).  As of version 5A(190), VT52 printer functions are also supported. Note: Print operations, when attempted on an OS/2 system that has no printer installed, might hang the Kermit program if the OS/2 Spooler is not active. 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. As of edit 190, transparent-print material no longer appears on the screen; it is directed exclusively to the printer (or print file), as on a real VT terminal. As of edit 190, there is a new screen copy facility. It honors the current SET PRINTER setting - i.e. the screen material goes either to the printer or to a disk file, depending on SET PRINTER (the printer by default). To copy either the current screen or a rolled-back screen use Alt-P (or Alt-p) or the CONNECT-mode escape character followed by the letter F (or f). Characters are dumped or printed "plain", without attributes (bold, reverse, underline, blink, colors), and always in text (not graphics) mode, even in an OS/2 window. Note: In the following escape sequence listings, "ESC [" means the Escape character (27) followed by a left bracket, OR, on an 8-bit connection, the CSI character (155). Other printer-control improvements: ESC [0i (and ESC [i) can be used to print the current screen. ESC [?19h sets the print region (for ESC [0i and ESC [i) to the whole screen. ESC [?19l sets the print region (ditto) to the current scrolling region. ESC [?1i prints the current cursor line. ESC [?18h means to send a formfeed after every print-screen operation ESC [?18l means NOT to send a formfeed after every print-screen operation Printer control is now available in VT52 emulation also (edit 190): ESC V prints the current cursor line ESC ] prints the current screen ESC W starts transparent printing (also ESC ^) ESC X stops transparent printing (also ESC _) ═══ 4.3.10. New Screen Capture Methods ═══ Prior to edit 191, there were two methods of screen capture: the LOG SESSION command and the \Kdump verb. LOG SESSION copies all incoming characters to the session log file, and so requires no actions by the user except turning on the log and turning it off. However, it has the disadvantage that the log file can be full of embedded escape sequences, e.g. when using a fullscreen application on the host. \Kdump is just the opposite -- it requires you to act (e.g. press a key) each time you want to save a screen, but it copies the screen itself, after it has been formatted by the terminal emulator, thus filtering out the escape sequences and showing only the final results (except, of course, for color, intensity, etc). Unfortunately, neither method is entirely satisfactory for capturing large amounts of information from fullscreen host applications such as library catalog searches. Either you must remember to "\Kdump" every screen, or else you will have a session log containing vast amounts of escape sequences that must be edited out before the information can be used. Edit 191 addresses this problem in two new ways. First, you can mark an arbitrarily large region of the scrollback buffer and copy it to a file by using SET PRINTER filename and then using the \Kdump verb in mark mode, for example by assigning it to a mouse event: set printer library.log set mouse button 2 none drag \Kdump Now you can use the mouse to copy anything that is in the rollback buffer, no matter how big, to a file. But what if the material you want does not get into the rollback buffer in the first place? This can happen with fullscreen applications that do not scroll and also do not clear the whole screen, since these are the only two ways that material gets into the rollback buffer. Examples would be applications that keep a menu bar across the top of the screen and never erase it, or that scroll text within a "scrolling region" that does not occupy the full terminal screen. In such cases you can use the new VT220 "autoprint" feature, redirected to a file, to capture the data cleanly, without escape sequences: set printer library.log set key \315 \KprtAuto This assigns the "autoprint" verb to the F1 key. The autoprint verb is a "toggle", meaning it turns autoprinting on if it is off, and it turns it off if it is on. Thus successive presses of the autoprint key (F1 in this example) turn autoprinting on, off, on, off, etc. Autoprinting is defined as follows. A screen line is sent to the printer (or the SET PRINTER file) whenever the cursor moves off the line with a linefeed, form feed, vertical tab, or autowrap. So as long as lines are sent to the terminal emulator in a sensible sequence, they will appear in your log file (or on your printer) in a sensible and readable fashion. ═══ 4.3.11. VT220 Emulation ═══ As of edit 191, C-Kermit supports VT220-level protected fields for forms-filling applications: 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 The VT220 DECID sequence sequence now properly reflects this and other new capabilities. As of edit 190, the VT102/220 emulator supports SRM (send/receive mode) directives from the host: ESC[12l turns on local echoing ESC[12h turns off local echoing And Kermit also now correctly responds to DECSCNM (screen mode) commands, which apply to the entire current screen, rollback buffer, and subsequently received characters: ESC[?5l puts the whole screen in reverse video ESC[?5h puts the whole screen in normal video And to: ESC F DEC arrow & function keys send only 7-bit sequences ESC G DEC arrow & function keys can send 8-bit sequences And it also supports the following VT220-and-above escape sequences for turning off character attributes selectively: ESC[22m turns bold off ESC[24m turns (simulated) underline off ESC[25m turns (simulated) blink off ESC[27m turns reverse video off ESC[28m turns invisible off ESC[?25h enables the cursor ESC[?25l disables the cursor As well as the VT220 DECDSR report requests (printer status, etc). C-Kermit's VT220 emulation lacks the following VT220 features:  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!). ═══ 4.3.12. VT220 Character Sets ═══ Edit 191 adds support for the full range of VT220 character-set designation and invocation, plus additional features beyond the VT220 but specified in ISO standards. It is beyond the scope of this document to go into deep technical detail. Until the next edition of Using C-Kermit is published, you can consult the DEC VT220 technical manual, the book Using MS-DOS Kermit, and/or ISO standards 2022 and 4873. Very briefly, the new features allow the host to use escape sequences to "designate" a particular repertoire of character sets to be used, and then some other escape sequences (or control characters) to switch among them. You will probably find host applications that take advantage of these features only on VMS systems. A typical setup might include ASCII (selected when a 7-bit character arrives), Latin-1 (selected when an 8-bit character arrives), and DEC Special Graphics (for line- and box-drawing, selected by single or locking shifts). Character sets can be designated by the host if they have either (a) ISO registered escape sequences (such as the 7-bit ISO 646 national versions and the 8-bit ISO Latin alphabets), or (b) DEC private escape sequences that are recognized by the VT220. All others (primarily the proprietary sets used by IBM, Apple, HP, DG, etc) can only by selected by the SET TERMINAL CHARACTER-SET command. NOTE: Receipt of character-set escape sequences do NOT cause automatic code-page switching or font loading. If they did, then the screen and the rollback buffer would instantly turn to garbage. In general it is not possible to mix different "alphabets" sets on the same screen, such as Hebrew and Cyrillic, or Latin-2 and Latin-1. ANOTHER NOTE: The SET TERMINAL LOCKING-SHIFT command now applies only to outbound (keyboard) characters. Locking shifts are always enabled for inbound characters. ═══ 4.3.13. ANSI Terminal Emulation ═══ ANSI terminal emulation was added in version 5A(190). Select it with: SET TERMINAL TYPE ANSI 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 actually has nothing at all 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. You can find the specification for ANSI terminal emulation in the back of your DOS manual, in the ANSI.SYS appendix. 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 (also called "DOORWAY mode)", 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. ═══ 4.3.14. Hebrew Terminal Emulation ═══ Use the following commands to enable Hebrew terminal emulation in OS/2 C-Kermit: SET TERMINAL CODE-PAGE 862 or SET TERMINAL FONT CP862 SET TERMINAL CHARACTER-SET { HEBREW-ISO, HEBREW-7, CP862 } SET TERMINAL BYTESIZE 8 ; Not needed for HEBREW-7 (choose the character set that is appropriate for the host or service you are connecting to.) Use SET TERMINAL CODE-PAGE 862 if your OS/2 system has the Hebrew National Language Support package installed; otherwise use SET TERMINAL FONT CP862 (which works only in fullscreen sessions). The following special features are available, over and above the ones listed in the Hebrew language support section in the International Character Sets section of this document:  The \KkbHebrew verb, which may be assigned to any key. It switches the main keypad (mostly the lowercase letters) into Hebrew mode (see keymap below). When the keyboard is in Hebrew mode, the terminal type in the status line has "-H" appended to it, for example "VT220-H".  The \KkbEnglish verb to switch the main keypad back to English mode.  The \KkbHebrew function is performed automatically if the host application sends CSI ? 35 h, and the \KkbEnglish function with CSI ? 35 l.  Hebrew keyboard mode is cleared when you execute the \Kreset (reset terminal) function, assigned to Alt-r by default. The Hebrew key layout associated with these verbs is NOT customizable. It follows follows the layout used by Hebrew WordPerfect, Windows, and Word. The names of the Hebrew letters are from the ISO 8859-8 Standard. These are the key assignments when the keyboard is in Hebrew mode: Hebrew Order Roman Order QWERTY Keyboard Order q = Slash , = Taw q = Slash w = Apostrophe . = Terminal Zade w = Apostrophe ' = Comma ' = Comma e = Qoph / = Period / = Period r = Resh t = Aleph ; = Terminal Pe t = Aleph c = Bet a = Shin y = Tet d = Gimel b = Nun u = Waw s = Dalet c = Bet i = Terminal Nun v = He d = Gimel o = Terminal Mem u = Waw e = Qoph p = Pe z = Zain f = Kaph a = Shin j = Chet g = Ayin s = Dalet y = Tet h = Yod d = Gimel h = Yod i = Terminal Nun f = Kaph l = Terminal Kaph j = Chet g = Ayin f = Kaph k = Lamed h = Yod k = Lamed l = Terminal Kaph j = Chet o = Terminal Mem m = Zade k = Lamed n = Mem n = Mem l = Terminal Kaph i = Terminal Nun o = Terminal Mem ; = Terminal Pe b = Nun p = Pe ' = Comma x = Samech q = Slash z = Zain g = Ayin r = Resh x = Samech ; = Terminal Pe s = Dalet c = Bet p = Pe t = Aleph v = He . = Terminal Zade u = Waw b = Nun m = Zade v = He n = Mem e = Qoph w = Apostrophe m = Zade r = Resh x = Samech , = Taw a = Shin y = Tet . = Terminal Zade , = Taw z = Zain / = Period To use OS/2 C-Kermit with host-based Hebrew software such as ALEPH (the Hebrew University library software), give these commands to Kermit: set terminal bytesize 8 set term code-page 862 ; Or set term font cp862 set term character-set hebrew-iso set key \319 \KkbHebrew ; F5 = Enter Hebrew keyboard mode set key \320 \KkbEnglish ; F6 = Enter English keyboard mode set key \321 \KdecF7 ; F7 = DEC F7 (used with ALEPH software) Of course, you can assign the \KkbHebrew, \KkbEnglish, and \KdecF7 verbs to any other keys of your choice. ═══ 4.3.15. Russian Terminal Emulation ═══ As of edit 191, C-Kermit can be used to read and write Cyrillic text on the host in Russian, Ukrainian, or Belorussian, even if you don't have a Cyrillic code page on your PC. The Cyrillic code page CP866 is used on the PC which may be loaded, in fullscreen sessions only, from PCFONTS.DLL. Use the following commands to enable Russian terminal emulation in OS/2 C-Kermit: SET TERMINAL FONT CP866 SET TERMINAL CHARACTER-SET { CYRILLIC-ISO, KOI8, SHORT-KOI, CP866 } SET TERMINAL BYTESIZE 8 ; Not needed for Short-KOI (choose the character set that is appropriate for the host or service you are connecting to.) The following special features are available:  The \KkbRussian verb, which may be assigned to any key. It switches the main keypad into Russian mode (see keymap below). When the keyboard is in Russian mode, the terminal type in the status line has "-R" appended to it, for example "VT220-R".  The \KkbEnglish verb to switch the main keypad back to English mode.  Russian keyboard mode is cleared when you execute the \Kreset (reset terminal) function, assigned to Alt-r by default. If your OS/2 system does not include a Russian keyboard and driver, you may use C-Kermit's Russian keyboard mode, which is inactive by default. To use it, you must assign the keyboard verbs: \KkbRussian \KkbEnglish to the "hot keys" of your choice, for example: set key \315 \KkbRussian ; F1 enters Russian keyboard mode set key \316 \KkbEnglish ; F2 enters English keyboard mode The Russian key layout associated with these verbs is NOT customizable. It follows follows the layout used by Microsoft Russian DOS and throughtout the former USSR. The names of the Cyrillic letters are from the ISO 8859-5 Standard. The following table shows the key assignments when the keyboard is in Russian mode. If you do not like them, you can use SET KEY commands to create your own layout. The "code" is the CP866 value, which applies no matter what the terminal character set is (Kermit will translate). US key Scan Russian Code Equivalent SET KEY command ` 96 io 241 SET KEY \96 \241 ~ 126 Io 240 SET KEY \126 \240 @ 64 " 34 etc... # 35 No 252 $ 36 % 37 ^ 94 : 58 q 113 i-kratkoye 169 (Lowercase Short i) Q 81 I-Kratkoye 137 (Uppercase Short I) w 119 tse 230 W 87 Tse 150 e 101 u 227 E 69 U 147 r 114 ka 170 R 82 Ka 138 t 116 ie 165 T 84 Ie 133 y 121 en 173 Y 89 En 141 u 117 ghe 163 U 85 Ghe 131 i 105 sha 232 I 73 Sha 152 o 111 shcha 233 See Note 1 O 79 Shcha 153 See Note 1 p 112 ze 167 P 80 Ze 135 [ 91 ha 229 { 123 Ha 149 ] 93 hard sign 234 See Note 2 } 125 Hard Sign 154 See Note 2 \ 92 / 47 a 97 ef 228 A 65 Ef 148 s 115 yeri 235 S 83 Yeri 155 d 100 ve 162 D 68 Ve 130 f 102 a 160 F 70 A 128 g 103 pe 175 G 71 Pe 143 h 104 er 224 H 72 Er 144 j 106 o 174 J 74 O 142 k 107 el 171 K 75 El 139 l 108 de 164 L 76 De 132 ; 59 e 237 : 58 E 157 z 122 ya 239 Z 90 Ya 159 x 120 che 231 X 88 Che 151 c 99 es 225 C 67 Es 145 v 118 em 172 V 86 Em 140 b 98 i 168 B 66 I 136 n 110 te 226 N 78 Te 146 m 109 soft sign 236 M 77 Soft Sign 156 , 44 be 161 < 60 Be 129 . 46 yu 238 > 62 Yu 158 / 47 . 46 ? 63 , 44 Note 1: On Belorussian keyboards, upper and lowercase letter shcha is replaced by upper and lowercase Cyrillic letter I (the one that looks just like a Roman I, not the one that looks like a backward Roman N). This letter does not exist in code page 866, but you can substitute Roman letter I if desired. Note 2: On Belorussian keyboards, upper and lowercase hard sign is replaced by upper and lowercase Belorussian letter Short U: SET KEY \93 \247 ; Map ] to lowercase Short u SET KEY \125 \246 ; Map } to uppercase Short U On Ukrainian keyboards, these same keys are mapped to Ukrainian letter Yi (looks like Roman I with two dots instead of one): SET KEY \93 \244 ; Map ] to lowercase yi SET KEY \125 \245 ; Map } to uppercase Yi See Table VIII-6 in Using C-Kermit, pp.470-473 for complete Cyrillic character-set listings for ISO 8859-5, CP866, KOI-8, and Short KOI. To define your own Cyrillic key map, create a file containing the desired SET KEY commands, in which the assigned values are CP866 values. Let's say this file is called C:\CKERMIT\RUSSKEY.INI. Then create a second file called C:\CKERMIT\ENGLISH.INI, which contains SET KEY commands to undo the settings from RUSSKEY.INI, for example: SET KEY \97 SET KEY \98 etc. Now you can define macros to TAKE these files: DEFINE RUSSKEY take c:\ckermit\russkey.ini DEFINE ENGLISH take c:\ckermit\english.ini and then you can assign them to hot keys, as in this example: SET KEY \315 \Krusskey ; F1 loads Russian key map SET KEY \316 \Kenglish ; F2 loads English key map ═══ 4.3.16. Screen Rollback ═══ As of edit 191, rollback has undergone a major revision. Rollback has two modes: SET TERMINAL ROLL-MODE INSERT and SET TERMINAL ROLL-MODE OVERWRITE. When ROLL-MODE is INSERT (the default) all incoming data is added to its proper place in your session, normally at the end (bottom) of the screen buffer, regardless of what part of the buffer you are currently looking at. Thus, when you are rolled back, you will not see newly arriving characters until you return to the end (bottom) of your session, e.g. by pressing the End key, or pressing Page Down the appropriate number of times. This mode keeps your entire session history "intact" -- a sequential visual history of your terminal session. When ROLL-MODE is OVERWRITE, incoming data overwrites the screen you are looking at, even if it is a rolled-back screen. In either mode, you are able to type to host, paste to the host, copy to the host, etc. In other words, you can do everything in a rolled-back screen that you could do in the current (bottom, non-rolled-back) screen. If you are rolled back when you issue the \KExit kverb (Alt-X), the next time you connect you will be restored to the previous location in the buffer. When the screen is rolled back the status line says SCROLLBACK and a line counter indicates how many lines you are rolled back, out of how many possible. Previous edits of OS/2 C-Kermit had SET TERMINAL ROLL { ON, OFF }. The former ON setting is equivalent to the current INSERT mode, and the former OFF setting is the same as OVERWRITE mode. The old commands are still accepted. ═══ 4.3.17. Screen Width and Height ═══ You can use 132 columns in a fullscreen session if your video adapter supports it, and you can also have 132 columns in a window session if you are running Warp. Issue the command: C-Kermit> set terminal width 132 at the C-Kermit prompt. You can switch back to 80-column mode via: C-Kermit> set terminal width 80 As of edit 191, host-directed switching between 80-column and 132-column mode is supported in fullscreen sessions, and also, under Warp only, in a window. The escape sequences are: [ ? 3 h Switch to 132 columns [ ? 3 l Switch to 80 columns This capability is properly announced in the DECID report for VT100 and above. Kermit uses whatever screen size its window is using at the time Kermit is started. In edit 191, you can also have Kermit set the terminal screen height explicitly: C-Kermit> set terminal height 42 This command affects only the terminal (CONNECT) screen, not the command window itself. The height is the number of lines in the terminal screen, not counting the status line. Under Warp, in a window session, any combination of width and height with a maximum screen area of 8192 characters can be given. In a fullscreen session, heights may be 24, 42, 49, or 59; not all combinations are supported by all video adapters. Warp is not required. Warning: Terminal widths of 80 and 132 are recommended, since these are the only two standard widths for VT terminal emulation. Under Warp, however, you may choose arbitrary widths, but this can lead to problems. For example, if you choose a width that is not a multiple of 8, and you have TERMINAL WRAP ON, and the host sends a tab-setting sequence that goes beyond the right edge of your screen, it will wrap around and mess up your tab settings. (You can restore tab settings to the default setting of every 8 spaces across your screen by pushing the "reset button", normally Alt-r). ═══ 4.3.18. Other Terminal Emulation Changes ═══ Other OS/2 C-Kermit terminal emulation improvements and changes (edit 190) are listed here:  Many bugs relating to character attributes, rollback, etc, fixed.  SET TERMINAL COLOR REVERSE is no longer operative; reverse video is now reverse video, period - the foreground and background colors are exchanged. More about this in the Questions and Answers section.  Host-directed switching between US ASCII and UK ISO 646 (number sign / Pound Sterling sign) reactivated, but only if TERMINAL CHARACTER-SET is ASCII. All other character-set selections must be accomplished by SET TERMINAL CHARACTER-SET commands.  The CONNECT command now prints a helpful hint if it fails because of "No carrier detected."  CLEAR TERMINAL-SCREEN (edit 191) copies the current terminal screen into the scrollback buffer and then clears it.  CLEAR SCROLLBACK (edit 191) clears (erases) the scrollback buffer. ═══ 4.3.19. Frequently Asked Questions - Terminal Emulation ═══ 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. Q: My Backspace key doesn't work! A: Kermit's backspace key sends DEL (ASCII 127) by default. Some host applications prefer Backspace (BS, ASCII 8). To make your Backspace key send Backspace, give this command: set key \127 \8 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 xyzcorp.com", 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. 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 the file to find out which PC key is mapped to which DEC key. If you don't like the mapping, edit the 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 (or whatever your C-Kermit directory is) (Note: The install script will do this for you if you say Yes.) 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 key mapping for a complete description of the new key mapping method, or read the material on key mapping in Using MS-DOS Kermit, but note that there are some differences between MS-DOS Kermit's and C-Kermit's keyboard scan codes. 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 if there is only one fore/background color for reverse video? Note that screen-video-flipping 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 the Table in the Terminal Emulation Hints and Tips section. If you stick to non-intense colors in your terminal screen, then reverse video will work as expected. 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: Normally 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. But there are two exceptions. If you start Kermit with an already-open file handle for the communications device, it will not be closed when Kermit exits. Second, if you use Kermit's SLIPCOMx devices, you can "borrow" a terminal port from the SLIP driver in order to make the phone connection, and then give it back to the SLIP driver. See the section on SLIP for details. Q: What does "TRANSMISSION BLOCKED: 15" mean? A: 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 tells 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 seconds 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. ═══ 4.3.20. Terminal Emulation Hints and Tips. ═══ 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 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. 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: ┌──────────┬──────────┬──────────────┐ │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 │ │ └──────────┴──────────┴──────────────┘ ═══ 4.4. File Transfer ═══ New file transfer features include: File Transfer Recovery Control-Character Unprefixing New MOVE Command New RECEIVE Command Features Automatic Directory Creation IBM Mainframe File Transfer Pausing Between Packets Fullscreen File Transfer Display Improvements Transferring OS/2 Files with Attributes Transferring OS/2 Directory Trees File Transfer Hints and Tips ═══ 4.4.1. File Transfer Recovery ═══ C-Kermit 5A(190) (the OS/2, UNIX, AOS/VS, VOS, OS-9, and Amiga versions), and MS-DOS Kermit 3.14, and IBM mainframe Kermit 4.3.1 have the ability to continue interrupted binary-mode file transfers, and also allow you to "manually" recover from certain other types of failures. The RESEND Command Manual Recovery: The PSEND Command ═══ 4.4.1.1. The RESEND Command ═══ The new RESEND command lets you continue a file transfer from the point where it was interrupted (for example, because of a telephone disconnection) without having to retransmit the data that was already successfully transmitted. Imagine, for example, transferring a ten-megabyte file over a 2400-bps modem connection when, after 9 megabytes have been sent, your call-waiting feature kicks in and drops the modem connection. 9 megabytes at 240 cps takes about 11 hours. The remaining megabyte would take about 1.2 hours. The recovery feature lets you complete the failed transfer in the amount of time it takes to send the as-yet-untranmsitted part of the file, rather than sending the entire file again from the beginning -- in this example, a savings of 11 hours. Before seeing how to use this feature, let's look at the restrictions: 1. Recovery works only for binary-mode transfers between computers that have stream-oriented file systems (such as DOS, UNIX, OS/2, etc). It does not work with any other transfer modes, including text or labeled. In other words, if you want to be able to use the recovery feature, you must tell the file sender to: SET FILE TYPE BINARY 2. The original transfer must have been done with SET FILE INCOMPLETE KEEP in effect at the receiver, meaning that incompletely received files are kept rather than discarded. In C-Kermit 5A(190) and later, this is the default, which is a change from previous releases. 3. Recovery only works between two Kermit programs that have this capability and negotiate it successfully. As of this writing, these programs include C-Kermit 5A(190) and later for UNIX, OS/2, Stratus VOS, OS-9, and the Commodore Amiga; MS-DOS Kermit 3.14 and later for DOS and Windows; and IBM Mainframe Kermit 4.3.1 and later. 4. You should never use SET FILE COLLISION RENAME if you intend to use the recovery feature, because the partially received file will have the wrong name. To recover a failed upload: reestablish the connection, access the same account and directory to which you were sending the file previously, start Kermit there and put it in RECEIVE or SERVER mode. Then escape back to the local Kermit program and give it these commands: SET FILE TYPE BINARY RESEND filename [ as-name ] The RESEND command should use exactly the same names (and SET FILE NAME options) as the SEND command that was interrupted. When you RESEND a file, the receiving Kermit, upon getting the filename, looks up the file and gets its size; it sends the size back to the sending Kermit, and the sending Kermit resumes sending from that point; the receiving Kermit appends incoming material to the partial file rather than creating a new file. You can recover a failed download in the same way. Just make sure you are accessing the same directories as before, and the files have (or are being sent with) the same names as before. The RESEND command ignores your SET FILE COLLISION setting; thus you need not change your FILE COLLISION setting when RESENDing, and you will not find it altered afterwards either. (But please, as mentioned earlier, do not use SET FILE COLLISION RENAME if you ever intend to use the RESEND command.) If the RESEND command is used, but a partial file of the same name does not exist on the receiving end, RESEND behaves just like SEND -- it sends the whole file. If the file on the receiving is the same size as the sender's copy, RESEND does nothing; both files are left alone. These properties let you resume the interrupted transfer of a group of files. Suppose you had originally done this: Receiver: Sender: SET FILE INCOMPLETE KEEP SET FILE TYPE BINARY RECEIVE (or SERVER) SEND *.ZIP and the phone hung up in the middle of one of the ZIP files. Just reestablish the connection, and recover this way: Receiver: Sender: SET FILE INCOMPLETE KEEP SET FILE TYPE BINARY RECEIVE (or SERVER) RESEND *.ZIP The files that were already sent are skipped, the file that was partially sent is recovered, and the files that were not sent yet are sent. In order for the recovery feature feature to be useful at all, the default for SET FILE INCOMPLETE was changed from DISCARD to KEEP when the RESEND command was added in edit 190. Otherwise an interrupted transfer would leave no partial file behind unless you had remembered to change the default. But now you have to pay closer attention to Kermit's messages to know whether a transfer succeeded or failed -- previously, if it failed, the file would not show up on the receiving end at all; in edit 190 and later, you'll get a partial file which could easily be mistaken for the complete file unless you change the default back to DISCARD or read the screen messages, or keep a transaction log. Watch out for SET FILE COLLISION RENAME, especially when used in conjunction with recovery. Recall that this option (which is NOT the default) renames the incoming file if a file already exists with the same name (the default is to rename the previously existing file, and store the incoming file with its own name). It is strongly recommended that you do not use SET FILE COLLISION RENAME if you ever intend to use the recovery feature:  When the file is first received by C-Kermit, its name will be changed if another file already has the same name. When you RESEND the same file after a failure, C-Kermit will probably try to append the re-sent portion to the wrong file.  Assuming that you get RESEND to work with FILE COLLISION RENAME, C-Kermit, when receiving the remainder of the file during a RESEND operation, will report back the wrong name. Nothing can be done about this because the name is reported back before the receiving Kermit program finds out that it is a recovery operation. Using RESEND, you can write a script program to really, REALLY send a file. Here is a sample, in which we dial up to a UNIX computer and send the MS-DOS Kermit distribution ZIP file. This script program runs under C-Kermit 5A(190) or later on OS/2 (and with a change in the dialout device name, under UNIX too), and under MS-DOS Kermit 3.14 or later. If the transfer fails, we reestablish the connection and restart the transfer from the point of failure, as many times as it takes to get the file across. ---(cut here)--- ask \%u { username: } askq \%p { \%u's password: } ; ; Settings for entire session. ; define \%s 20 ; Seconds to pause between each try define \%n 7654321 ; Phone number set modem hayes ; Modem type set port com1 ; Communication port set speed 19200 ; Speed set file type binary ; File transfer mode must be binary set input timeout quit ; This is just to keep the script program short set count 50 ; Try up to 50 times to send the file goto nomsg ; Skip message the first time :LOOP ; Come here to redial hangup ; Give the phone a rest echo CONNECTION BROKEN. echo Pausing for \%s seconds... sleep \%s Echo redialing... :NOMSG dial \%n ; Dial the phone number if fail goto AGAIN ; Keep trying... output \13 ; System answered, send a carriage return input 15 login: ; Get login prompt output \%u\13 ; Send user ID input 8 Password: ; Get password prompt output \%p\13 ; Send password input 60 {$ } ; Get system prompt cd /kermit ; CD to desired source directory output cd mskermit\13 ; and destination directory input 8 {$ } ; Get system prompt out kermit -r\13 ; kermit -r(eceive) on remote system input 10 KERMIT READY ; Wait for READY message pause 1 ; Plus a second for safety resend msvibm.zip ; RESEND the file if success goto done ; Success means file is completely transferred :AGAIN if count goto LOOP ; Otherwise, try again. Stop 1 Too many tries. ; Too many tries, give up. :DONE echo File transferred OK ; Success, give message output exit\13 ; Log out from remote computer pause 5 ; Give it time... hangup ; Hang up stop 0 Script succeeded ; Finished, the end. ---(cut here)--- ═══ 4.4.1.2. Manual Recovery: The PSEND Command ═══ The PSEND ("partial send") command is like the SEND command, but it begins sending from a specified position in the file: PSEND filename position [ as-name ] filename must refer to a single file, not a file group. position is the byte position in (offset into) the file; 0 means the beginning, 1000 means the 1001st byte. As with the SEND command, the file is sent under its own name unless you specify an "as-name". Unlike RESEND, PSEND can be used for both text and binary transfers, and no special capabilities are required of the Kermit program on the receiving end. The PSEND command can be viewed as part of a "do-it-yourself" recovery feature to be used when the other Kermit program does not support recovery. For example, suppose you were sending a file called OOFA when the connection hung up, and that the receiving Kermit program had been instructed to keep incompletely received files (SET FILE INCOMPLETE KEEP). If the transfer was in binary mode, you could note the length of the partial file on the receiving end; let's say it was 123456. Then tell the file receiver to: SET FILE COLLISION APPEND RECEIVE and tell the sender to: SET FILE TYPE BINARY PSEND OOFA 123456 If the receiver does not support SET FILE COLLISION APPEND, you could just use PSEND to create a new file: SET FILE TYPE BINARY PSEND OOFA 123456 OOFA.NEW and then, after the transfer is complete, join the two pieces together on the receiving end, using a system command or utility. ═══ 4.4.2. Control-Character Unprefixing ═══ This feature allows you to improve C-Kermit's file transfer performance on connections that you know are transparent to certain control characters. It lets you tell C-Kermit exactly which control characters need to be prefixed and encoded, and which ones can be transmitted "bare" when sending files. SET { SEND, RECEIVE } CONTROL-PREFIX code Sets the control-character prefix which C-Kermit uses to the ASCII character represented by the numeric code. The code must be in the range 33-63 or 96-126. Normally it is 35 (#, number sign). SEND is the one that C-Kermit should use in packets it is sending. RECEIVE should normally never be used, except to override some kind of protocol negotiation foulup with a buggy commercial or shareware Kermit implementation. Synonym: SET { SEND, RECEIVE } QUOTE. SET CONTROL-CHARACTER UNPREFIXED { code..., ALL } Says you think it's safe to include the control character represented by code without prefixing in packets which C-Kermit sends. The code is the numeric ASCII code for a control character, 1-31, 127-159, or 255. For example, linefeed (code 10) is normally sent as two printable characters, #J. SET CONTROL UNPREFIXED 10 lets linefeed be sent literally. Include the word ALL to unprefix all control characters (except 0). Or you can specify a list of one or more numeric values, separated by spaces, e.g.: SET CONTROL UNPREFIXED 2 4 5 18 20 If you can safely declare a lot of control characters to be UNPREFIXED, you can send binary files (esp. precompressed ones) up to about 20-25% faster. If you include a control character in this category that causes trouble, however, the transfer will fail, so experimentation is necessary. This command will not let you "unprefix" the NUL character (0), nor the following characters if C-Kermit's current FLOW-CONTROL setting is XON/XOFF: 17, 19, 145, 147. Nor can you unprefix character 255 on a TELNET connection (if C-Kermit knows it's a TELNET connection). SET CONTROL-CHARACTER PREFIXED { code..., ALL } Says that the given control character(s) must be prefixed in Kermit packets. By default, all control characters, 0-31, 127-159, and 255, are prefixed. SHOW CONTROL-PREFIXING Displays the current control prefix and a table of all control-character values, showing 1 for each one that will be prefixed and 0 for each one that will not be prefixed. SET REPEAT PREFIX code Sets the repeat-count prefix to the ASCII character represented by the numeric code. Normally it is 126 (tilde). The code SET REPEAT COUNTS { OFF, ON } Turns the repeat-count compression mechanism off and on. REPEAT COUNTS are ON by default. Turn them OFF in case they cause trouble when used against a faulty Kermit implementation in a shareware or commercial communications program. Or when transferring precompressed files (like .ZIP or .Z files), since it is very rare to find runs of repeated characters, and disabling the repeat-count mechanism frees another character from prefixing, thus resulting in slightly more efficient transfers. The purpose of the SET CONTROL UNPREFIX command is to unilaterally configure C-Kermit to skip prefixing and printable encoding of selected control characters to achieve higher performance when sending files. This feature takes advantage of the fact that most Kermit programs will accept control characters within packet data-fields literally, provided they get through at all, and provided they do not have a special meaning to the receiving Kermit program (such as, in many cases, the packet-start and packet-end characters). There is no protocol negotiation between the two Kermit programs to determine a "safe set" of control characters, and in fact any such negotiation would be largely meaningless, because in most cases the two Kermit programs don't have all the needed information. For example, there might be a terminal server or PAD between them that is sensitive to a particular control character, even though the two Kermit programs are not. If you include in your SET CONTROL UNPREFIXED list one or more control characters that are unsafe, any of several things might happen: 1. Transfer of any file containing these characters will fail. 2. The receiving Kermit program might be interrupted or halted. 3. Your connection might become hung, stuck, or broken. For example because a control character causes a PAD, terminal server, modem, or similar device to go from online mode to command mode. The set of safe control characters depends on the two Kermit programs, their settings, the host operating systems and their settings, the communication and flow control methods, and all the devices, drivers, and protocols that lie between the two Kermit programs. Therefore, this feature is recommended only for use on well-known and often-used connections, so the time invested in finding an optimal unprefixed control-character set will pay off over many file transfers. You must be willing to experiment in order to achieve the optimal safe set. Here is one way. Create a short file containing all 256 possible bytes in sequence and also in pairs, as well as several text strings surrounded by CRLFs; for example, compile and run the following program, redirecting its output to a file: ---(cut here)--- #include main() { int i; puts("\r\n256-byte test pattern:\r\n"); for (i = 0; i < 256; i++) putchar(i); /* singles */ puts("\r\n256-double-byte test pattern:\r\n"); for (i = 0; i < 256; i++) { putchar(i); putchar(i); } /* in pairs */ puts("\r\nEnd of test patterns\r\n"); } ---(cut here)--- To send the file to MS-DOS Kermit from either C-Kermit or MS-DOS Kermit, try the following settings: SET CONTROL UNPREFIXED ALL ; Turn prefixing off for all but 0 SET CONTROL PREFIXED 1 ; Turn it back on for packet-start character SET CONTROL PREFIXED 129 ; and 8-bit version thereof (HINT: Abbreviate SET CON U and SET CON P) Or to send the file from MS-DOS Kermit to C-Kermit, tell MS-DOS Kermit to: SET CON U ALL ; Turn prefixing off for all SET CON P 0 ; Turn it back on for NUL SET CON P 3 ; and for Ctrl-C SET CON P 131 ; as well as Ctrl-C + parity bit Note 1: 3 and 131 normally need not be prefixed when sending to C-Kermit 5A(190) or later, nor to 5A(189) if you have SET TRANSFER CANCELLATION OFF. Note 2: 1 and 129 need not be prefixed when sending files *to* C-Kermit, but must be prefixed when sending files to MS-DOS Kermit. Note 3: 13 (carriage return, the customary packet terminator) normally need not be prefixed when sending files to either C-Kermit or MS-DOS Kermit, except on a TELNET connection (because TELNET servers are likely to change CRLF into CR). Try to send the test file in binary mode. If it works, fine. If not, try prefixing some of the other likely control characters (see below). Once you find the minimum set of prefixed control characters for the test file, it is likely they will also work for any other file on the same connection. Try sending a large precompressed (e.g. ZIP or .Z or GZIP) file. And, of course, for maximum performance, also use a window size greater than 1 (say, 3) and a packet length of 1000 or more. Under ideal conditions (totally transparent and clean serial connection, no Xon/Xoff, and C-Kermit has been told to SET TRANSFER CANCELLATION OFF, see below), the minimum set of control characters that need to be prefixed is: SENDER RECEIVER PREFIXED CONTROLS MS-DOS Kermit MS-DOS Kermit 1 129 MS-DOS Kermit C-Kermit 0 C-Kermit MS-DOS Kermit 0 1 129 C-Kermit C-Kermit 0 For example, to set up C-Kermit to unprefix the minimum set of prefixed control characters for sending files to MS-DOS Kermit, tell C-Kermit to: SET FLOW NONE ; Or SET FLOW RTS/CTS SET CONTROL UNPREFIX ALL SET CONTROL PREFIX 1 129 ; C-Kermit always prefixes character 0 When the mininum set doesn't work, consult this list of control characters that are apt to cause trouble and are therefore likely candidates for prefixing. In particular, note that unprefixing of the packet-start character (normally 1 and 129), can cause problems when sending to C-Kermit if the communication link (including device input buffers) is noisy or apt to lose characters. set con p 0 ; Ctrl-@ = NUL, internal string terminator in C-Kermit. ; Also, often discarded as padding. set con p 1 ; Ctrl-A = Packet-start character. set con p 3 ; Ctrl-C = Packet breakout for remote-mode C-Kermit, ; packet breakout for server-mode MS-DOS Kermit, ; likely to cause interruptions on other systems. set con p 13 ; Ctrl-M = Carriage return, packet-end character. ; Always prefix on TELNET connections. set con p 14 ; Ctrl-N = Shift Out set con p 15 ; Ctrl-O = Shift In set con p 16 ; Ctrl-P = Commonly-used X.25/X.3 PAD escape character set con p 17 ; Ctrl-Q = XON, must be prefixed with Xon/Xoff flow control set con p 19 ; Ctrl-S = XOFF, must be prefixed with Xon/Xoff flow control set con p 27 ; Ctrl-[ = ESC, prefix if going through an ANSI device set con p 28 ; Ctrl-\ = CONNECT-mode escape for C-Kermit set con p 29 ; Ctrl-] = CONNECT-mode escape for TELNET set con p 30 ; Ctrl-^ = Cisco terminal server escape. set con p 127 ; Ctrl-? = DEL, often discarded as padding. ; Also becomes TELNET IAC if parity bit is added. set con p 128 ; = NUL + 128 (i.e. NUL + parity bit) set con p 129 ; = Ctrl-A + 128 set con p 131 ; = Ctrl-C + 128 set con p 141 ; = CR + 128 set con p 145 ; = XON + 128 set con p 147 ; = XOFF + 128 set con p 255 ; 255 = TELNET IAC, must be prefixed on TELNET connections INCLUDING TELNET connections through terminal servers! Note, by the way, that nothing special need be done for SLIP connections, since the four special SLIP characters are in the G1 printable range: 192 SLIP END character 219 SLIP ESC character 220 SLIP END quote 221 SLIP ESC quote Here is a suggested (conservative) starting point for experimenting with control-character unprefixing. Tell the file sender to: SET CONTROL UNPREFIX ALL SET CONTROL PREFIX 0 1 3 13 17 19 127 129 131 141 145 147 255 Perhaps some of these can be removed, depending on the connection, and maybe others need to be added. If you are going through a terminal server or an intermediate Kermit or TELNET program, also add the appropriate escape character values (bare, and plus 128). PREFIXING NOTES:  If C-Kermit or MS-DOS Kermit has initiated a TELNET connection, prefixing of 255 (TELNET IAC) is forced automatically. IMPORTANT WARNING When you have a TELNET connection through a terminal server, neither one of the Kermit programs knows that it's a TELNET connection, and in this case unprefixing of 255 is NOT automatically disabled. This can cause file transfer failures. When in doubt, do not unprefix 255.  Kermit will not let you unprefix XON (17), XOFF (19), XON+128 (145), or XOFF+128 (147) if its FLOW-CONTROL setting is XON/XOFF. If you want to unprefix these, make sure *both* Kermits have first been told to SET FLOW NONE (or RTS/CTS), and that XON/XOFF flow control is not in effect anywhere along the communication path between the two Kermits.  When sending files to C-Kermit 189 or earlier, and C-Kermit is in remote mode, you should normally tell the file sender to SET CONTROL PREFIX 3 and SET CONTROL PREFIX 131, because C-Kermit 189 and earlier (by default) takes two Ctrl-C's (3 or 131) in a row as cancellation of packet-mode. However, you can UNPREFIX these characters if you know your files do not contain two Ctrl-C's in a row, or if you tell C-Kermit to SET TRANSFER CANCELLATION OFF, or SET TRANSFER CANCELLATION ON code number when you know that number copies of code do not occur in a row in the data. When sending files to edit 190 of C-Kermit and later, you can leave 3 and 131 unprefixed unless you have disabled repeat-count compression. ═══ 4.4.3. The New MOVE and MMOVE Commands ═══ By popular demand, C-Kermit now has a way of deleting files that it sends after it has sent them successfully, in effect moving them from one computer to another. The commands are MOVE and MMOVE. These commands are identical to SEND and MSEND in every way, except that each file that is sent successfully -- that is, that is completely received by the other computer, or that was already on the other computer to begin with -- is deleted from the computer it was sent from. For example, suppose your current OS/2 directory contains three files: OOFA.EXE, OOFA.ZIP, and OOFA.INF. If you tell C-Kermit to "send *.*", the three files will be sent to the other computer, and they will also remain on your OS/2 disk. But if you tell C-Kermit to "move *.*", they will be removed from your OS/2 disk after they are sent successfully to the other computer. If any of the files is not sent successfully, then it is not removed from your OS/2 disk. For example, suppose OOFA.ZIP is too big to fit on the receiving computer's disk, but OOFA.EXE and OOFA.INF can fit. In that case, assuming OOFA.EXE and OOFA.INF are transferred successfully, they will be deleted from your OS/2 disk, but OOFA.ZIP will not be. ═══ 4.4.4. New RECEIVE Command Features ═══ In edit 190 and later, the RECEIVE command can accept a device or directory name as an argument, and all incoming files will go into the specified device or directory under the names they were sent with, for example: RECEIVE D: or: RECEIVE D:\BUDGET\1995 If the name is not a device or directory name, it is treated as before: as a name under which to store the (first) incoming file. This change also affects the '-a' ("as-name") command-line option. When SET FILE NAMES LITERAL is in effect, and a file arrives that is to be stored on a FAT (i.e. DOS) volume but its name is illegal for FAT, the file is no longer refused. Instead, the file is created with a legal FAT name and the original name is saved in the file's Extended Attributes, so it is visible on the desktop and usable on HPFS volumes. Edit 190. ═══ 4.4.5. Automatic Directory Creation ═══ File names are treated according to the SET FILE NAMES command (see p.114 of Using C-Kermit), CONVERTED (the default) or LITERAL. SET FILE NAMES LITERAL means:  When sending files, put the filespec into the outgoing file header packet exactly as the user typed it. What happens on the receiving end is entirely up to the receiver.  When receiving files, use the file specification from the incoming file header exactly as given, so if it happens to include a device or directory specification, C-Kermit attempts to use it, and if the device and/or directory does/do not exist or are not write-accessible, the transfer fails. SET FILE NAMES CONVERTED, which is the default, transforms outgoing filenames by (a) removing device, directory, and other "extraneous" information, (b) uppercasing all lowercase letters, (c) making sure there is no more than one period, and (d) translating all "uncommon" characters to X's. A new command allows us to strike a compromise between these two methods: SET { SEND, RECEIVE } PATHNAMES { ON, OFF } SET SEND PATHNAMES ON means to leave pathnames ON outbound file names, which is the default for compatibility with earlier behavior. Note, however, that PATHNAMES are always stripped from outbound filenames when FILE NAMES are CONVERTED, and in OS/2, disk letters are always stripped. SET SEND PATHNAMES OFF means to strip OFF path information, leaving only the file's name. SET SEND PATHNAME applies only to the filename given directly to a SEND or MSEND command, and not to the "as-name", which is always sent literally and without modification, regardless of SEND PATHNAME or FILE NAMES settings. SET RECEIVE PATHNAMES applies to the filenames in incoming file header packets; ON means to leave the name alone and attempt to use it as-is, OFF means to attempt to strip the path information ON THE ASSUMPTION that any path information found there would be in the notation of the local file system, and therefore recognizable. If not, the results are unpredictable; for example, if a file called MYVAX::DUA0:[OLAF.PICS]MONA_LISA.GIF;17 arrives on an OS/2 system, OS/2 C-Kermit can not be expected to distinguish the path information from the name (it is a general principle of communication protocols that a particular computer must not be expected to understand the conventions and formats of some other kind of computer). When a file arrives whose name includes a directory specification (with either '/' or '\' as the directory separator), OS/2 C-Kermit will attempt to put it in the specified directory. In the 32-bit version only: If the incoming file name contains OS/2 directory information (such as C:\TEXT\LETTERS\ANGRY\OOFA.TXT) -- either absolute or relative, then, if the named directory, or any of its ancestors, does not exist, Kermit attempts to create it (or them) before opening the output file. For example, suppose your current directory is C:\USR\OLGA\BUDGET, and a file arrives under the name AAA\BBB\CCC\DDD\BANKRUPT.TXT, and that the C:\USR\OLGA\BUDGET\AAA directory already exists, but it does not have a BBB subdirectory. Then Kermit will create the BBB subdirectory, and then the CCC subdirectory under BBB, and then the DDD subdirectory under CCC, and then it will store the BANKRUPT.TXT file in the C:\USR\OLGA\BUDGET\AAA\BBB\CCC\DDD directory. If a non-existent or non-writable drive is specified in the directory path, the directory creation will fail. Use the SHOW FILE command to display the SEND/RECEIVE PATHNAME settings. ═══ 4.4.6. IBM Mainframe File Transfer ═══ Edit 190 added new features that allow transfer of files with IBM mainframes through 3270 protocol converters that cannot be put into transparent mode, such as the 3708 and pre-B2 AEA controllers. IBM Mainframe Kermit 4.2.4 or later is required. Very briefly: Kermit-370: C-Kermit or MS-DOS Kermit: SET CONTROLLER FULL SET RECEIVE START 62 SET RECEIVE START 62 SET SEND START 62 SET SEND START 62 SET BLOCK B SET BLOCK B SET HANDSHAKE 0 SET HANDSHAKE NONE This sets the packet-start character in both directions to be the greater-than sign (>) (ASCII 62) and enables a new block-check type (a 12-bit checksum containing no blanks) to defeat the trailing-blank-stripping feature found in many protocol converters. Short packets are used automatically. See your IBM Mainframe Kermit documentation for additional details. ═══ 4.4.7. Pausing Between Packets ═══ The new command: SET { SEND, RECEIVE } PAUSE number tells C-Kermit to pause the given number of milliseconds (thousandths of seconds) before sending each packet. This might be necessary when communicating with certain devices or over certain kinds of connections. Don't use this unless file transfers fail without it, since it slows transfers down. SHOW PROTOCOL displays the current setting. SET SEND PAUSE and SET RECEIVE PAUSE do exactly the same thing. Edit 190. ═══ 4.4.8. Fullscreen File Transfer Display Improvements ═══ OS/2 C-Kermit now shows a file-transfer "thermometer" (percent bar-graph) to graphically represent the progress of the file transfer. It can be explicitly selected or deselected via the new trailing argument to this command: SET FILE DISPLAY FULLSCREEN { THERMOMETER, NO-THERMOMETER } A running display of the transfer speed in characters per second (CPS) is also shown; it is computed as an average of actual file characters transferred so far versus elapsed time. ═══ 4.4.9. Transferring OS/2 Files with Attributes ═══ Edit 190 also adds support for SET FILE TYPE LABELED, as in the VMS version of C-Kermit. This allows OS/2 files to be transferred with all their extended attributes intact-desktop material, icons, long file names on FAT partitions, etc. Consult the VMS appendix of Using C-Kermit for information on labeled file transfer. Briefly, the idea is that an OS/2 file can be transferred from one OS/2 system to another with all its extended attributes intact. It can also be transferred to an intermediate (non-OS/2) system for archival, and later transferred to another OS/2 system and restored to its original form. An OS/2-specific SET FILE LABEL command is also provided for controlling how regular OS/2 file attributes are handled in labeled file transfers: SET FILE LABEL {ARCHIVE, READ-ONLY, HIDDEN, SYSTEM, EXTENDED} {ON, OFF} By default, all but ARCHIVE are ON. All of a file's attributes are always transmitted; this command tells the file receiver whether to pay attention to them (ON) or not (OFF). Use SHOW LABELED-FILE-INFO to display the values of these settings. ═══ 4.4.10. Transferring OS/2 Directory Trees ═══ Using the new REXX interface C-Kermit provides a XSEND command similar to that provided for years with MS-DOS Kermit. The syntax is: XSEND path filespec For example: XSEND C:\ * (note the space between the path and the filespec). XSEND traverses the directory tree indicated by the path and sends all files matching the filespec to another computer. To send an entire drive (desktop) from one OS/2 machine to another:  Place the remote PC's C-Kermit into server mode.  Issue the REMOTE SET FILE TYPE LABELED command to the local PC's Kermit.  Change the current working directory on the remote machine to where you want the files to be sent by giving a REMOTE CD command.  Issue an XSEND command on the local PC. The entire directory tree will be replicated on the remote system including the Extended Attributes. ═══ 4.4.11. File Transfer Hints and Tips ═══ Some communication software claims to implement sliding windows, but does so incorrectly. If sliding window transfers fail, set C-Kermit's window size to the smallest one that works, for example: SET WINDOW 1 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. ═══ 4.5. New Client/Server Features ═══ Some new REMOTE commands and server functions are now available: New REMOTE Commands "WHATAMI" - Making Kermit GET more like FTP GET ═══ 4.5.1. New REMOTE Commands ═══ The following commands are new to edit 191: REMOTE COPY filespec1 filespec2 Asks the remote server to make a copy of filespec1, calling it filespec2 The OS/2 C-Kermit server can execute this command too. { ENABLE, DISABLE } COPY Enable or disable the server's execution of REMOTE COPY commands. REMOTE RENAME filespec1 filespec2 Asks the remote server to make change the name of filespec1 to filespec2 The OS/2 C-Kermit server can execute this command too. { ENABLE, DISABLE } RENAME Enable or disable the server's execution of REMOTE RENAME commands. The following features were added in edit 190: REMOTE PWD Allows the client to ask for the server's current directory in system-independent way. Formerly, this could only be done via system- dependent REMOTE HOST commands. The response is displayed on the screen. REMOTE SET FILE TYPE { TEXT, BINARY, LABELED } The LABELED option has been added to this command in the VMS and OS/2 versions only. Also, the file type specified in this command also takes effect locally. Previously, it was only sent to the server. Edit 190. REMOTE QUERY { KERMIT, SYSTEM, USER } name Asks the server to send the value of the variable of the given type that has the given name. If the query succeeds, the value is displayed on your screen and it is also stored in a local read-only Kermit variable, \v(query) If the query fails, an error message is printed and the \v(query) variable is set to the empty string. In C-Kermit and MS-DOS Kermit, "KERMIT" variables are the \v(name) kind, such as \v(time), \v(version), \v(date), etc. "SYSTEM" variables are DOS or UNIX environment variables, such as PATH, USER, HOME, or VMS logical names, etc. USER variables are everything else - \%a-z, \%1-9, and macro names used as long variable names. The name of a KERMIT or SYSTEM variable must be given in an implementation-independent format without special syntax, e.g. TIME, DATE, VERSION, PATH, USER, etc, rather than (say) \v(time), \$(PATH). However, in most cases, case matters in system variables. The of a USER variable is given in the syntax of the server, e.g. \%a. Examples: C-Kermit> remote query kermit time 13:25:18 C-Kermit> echo The server's time is: \v(query) The server's time is: 13:25:18 C-Kermit>rem q k dir ; Note, abbreviations allowed. /usr/olga/letters C-Kermit>echo The server's current directory is: \v(query) The server's current directory is: /usr/olga/letters C-Kermit>rem q system USER olga C-Kermit>echo user = \v(query) user = olga REMOTE ASSIGN name [ value ] Asks the server to assign the given value to the remote user variable denoted by name. The value is fully evaluated LOCALLY before being sent to the Kermit server. The maximum length for the value is governed by the maximum negotiated packet length, i.e. the server's RECEIVE PACKET-LENGTH. Synonym: REMOTE ASG. Examples: C-Kermit>remote assign \%a \v(time) ; Client's time to server's \%a C-Kermit>remote query user \%a 13:41:18 ; This is the client's time C-Kermit>rem asg myname Olga ; My name to server To force a string corresponding to a local variable name to be sent literally, use two backslashes: C-Kermit>remote assign \%a \\v(time) ; "\v(time)" to server's \%a. C-Kermit>remote query user \%a 13:41:18 ; This is the server's time. C-Kermit> You can disable and enable the server's handling of REMOTE QUERY and ASSIGN with the commands: DISABLE QUERY The server should not respond to REMOTE QUERY commands DISABLE ASSIGN The server should not respond to REMOTE ASSIGN commands ENABLE QUERY The server should respond to REMOTE QUERY commands ENABLE ASSIGN The server should respond to REMOTE ASSIGN commands By default, like all other ENABLE/DISABLE items, the initial state is ENABLEd. ═══ 4.5.2. "WHATAMI" - Making Kermit GET more like FTP GET ═══ Those who are accustomed to using client/server applications such as FTP expect that certain kinds of commands, when given to the client, will affect the server correspondingly. Most notable among these commands (in FTP's case) are those that set the transfer mode: BINARY, ASCII, etc. In Kermit, however, the transfer mode has always been determined by the file sender, a concept totally unrelated to the client/server distinction, and less than obvious to most people. Furthermore, Kermit programs do not always have a client/server relationship - there is also the send/receive arrangement. C-Kermit 5A(190) and MS-DOS Kermit 3.14 implement a new "What Am I" feature, which operates transparently to the user (i.e. there are no commands to control it), and results in FTP-like operation when: 1. One Kermit program is in SERVER mode, the other is a client, AND: 2. Both Kermit programs support the WHATAMI feature. Currently, these are limited to C-Kermit 5A(190), MS-DOS Kermit 3.14, and IBM Mainframe Kermit 4.3.1. Presently, the WHATAMI feature affects only the GET command, and addresses the following scenario: 1. User starts a Kermit server, giving it no special settings. 2. User tells the client to: SET FILE TYPE BINARY SET FILE NAMES LITERAL GET cko190.zip 3. The file is transferred in text mode when the user expected a binary transfer, and the name was converted even though the user wanted it not to be changed. At the beginning of any protocol transaction, the two Kermits exchange "What Am I" information as part of the S or I packet data. This information includes (a) whether I am a client or server; (b) my transfer mode (text or binary); and (c) my file name handling (literal or converted). Then, when the server receives a GET-command packet from the client, AND if WHATAMI information has been successfully exchanged, then the server switches its file transfer mode and file name handling to the client's corresponding modes. Nothing special happens when files are sent TO the server, since this works right anyway, using the previous mechanisms. Hopefully this change will result in more pleasant surprises than unpleasant ones. One Beta tester (a seasoned Kermit user), however, was unpleasantly surprised when he sent the following commands from a client to a server: REMOTE SET FILE TYPE BINARY GET OOFA.ZIP The file arrived in text mode because the client was in text mode. The user was relying of the old rule, by which the file sender informs the file receiver of the transfer mode via the attribute packet, but since the WHATAMI exchange took place after the REMOTE SET, it changed the server's mode back to text. To cure this situation, REMOTE SET FILE TYPE now sets the local file transfer mode too. Should all this sound confusing, remember that the WHATAMI feature (and the other mechanisms for reconciling file transfer mode) make a difference only when the sender and receiver's file transfer modes do not agree. The rules can be summarized like this: 1. To be certain of the file transfer mode, give the same SET FILE TYPE command to both Kermits (exception: when VMS C-Kermit is sending a file, it determines the transfer mode for each file automatically). In case you did not do this, and the transfer modes of the two Kermit programs disagree when the file transfer starts: 2. If the file sender is VMS C-Kermit, it determines the file type automatically unless its file type has been set to IMAGE or LABELED. Otherwise: 3. If both Kermits have the WHATAMI feature, the client program's transfer mode prevails. Otherwise: 4. If both Kermit programs have Attribute-packet capability, the sender will inform the receiver of the transfer mode, and the receiver will switch to the sender's transfer mode automatically. Otherwise: 5. The transfer proceeds with each Kermit program using the transfer mode that the user has told it to use. This can result in mismatches, which are usually not what was intended. Since not all Kermit implementations - particularly those found in commercial or shareware software packages - implement the WHATAMI feature or Attribute packets, it is always safest to inform both Kermit programs of the transfer mode prior to file transfer. ═══ 4.6. International Character Sets ═══ Since Using C-Kermit was published:  Edit 189 of C-Kermit added support for Hebrew character sets.  Edit 190 added Hebrew terminal emulation to OS/2 C-Kermit.  Edit 190 added support for the Hewlett-Packard Roman8 character set.  Edit 191 added support for Russian terminal emulation. ═══ 4.6.1. Hebrew Character Sets ═══ C-Kermit 5A(189) has the following new commands for Hebrew file transfer: SET TRANSFER CHARACTER-SET HEBREW-ISO: ISO 8859-8 Latin/Hebrew Alphabet SET FILE CHARACTER-SET HEBREW-ISO: ISO 8859-8 Latin/Hebrew Alphabet SET FILE CHARACTER-SET CP862: Hebrew PC Code Page SET FILE CHARACTER-SET HEBREW-7: DEC 7-Bit (VT100) Hebrew These commands work just like the corresponding commands for Cyrillic character sets, described in Chapter 9 of Using C-Kermit When receiving files, C-Kermit recognizes Hebrew files automatically if the file sender tags the file as Hebrew in the Attribute packet, which the file sender should do if it has been given the SET TRANSFER CHARACTER-SET HEBREW command; C-Kermit does not, however, switch automatically to a Hebrew file character-set, so you must choose one in advance if that's what you want. The tag is "I6/138" (these are ISO registration numbers). When sending files in Hebrew mode, of course, C-Kermit includes the same tag. An invertible translation table between Latin/Hebrew and CP862 is used during both terminal emulation and file transfer. The translation table between Hebrew-7 and Latin/Hebrew, however, is not invertible because these character sets are different sizes. Here is an example of uploading a Hebrew file from a PC to UNIX. The PC version is coded in the Hebrew PC code page, and the UNIX version is to be stored in the 7-bit Hebrew character-set so it can be sent as network e-mail: UNIX> set file character-set hebrew-7 ; I want 7-bit text for email UNIX> receive ; Wait for the file. Alt-X ; Escape back to the PC OS/2> set file type text ; Make sure we are in text mode OS/2> set file character-set cp862 ; File is in Hebrew PC code page OS/2> set xfer character-set hebrew ; Send using ISO Latin/Hebrew OS/2> send rab.oof ; Send the file The file sender automatically tells the file receiver that the transfer character-set is Hebrew. The three Hebrew character sets are also available for use in C-Kermit's TRANSLATE command, which translates a local file from one character-set to another. Thus you can use C-Kermit to convert a local file from, say, Latin/Hebrew to Hebrew-7. C-Kermit's Hebrew file transfer features can be used in conjunction with MS-DOS Kermit 3.13 and later (with which C-Kermit shares the same translation tables to ensure consistent translations) and IBM Mainframe Kermit 4.2 or later, which translates between Latin/Hebrew and IBM CECP 424 (the Hebrew EBCDIC Country Extended Code Page). Hebrew character-set translation is enabled during terminal emulation via the command: SET TERMINAL CHARACTER-SET { HEBREW-ISO, HEBREW-7, CP862 } [ local-cset ] The terminal character-set affects not only CONNECT mode, but also the session log and the TRANSMIT command. Please refer to the section on Hebrew Terminal Emulation for additional details. ═══ 4.6.2. The Hewlett Packard Roman8 Character Set ═══ C-Kermit 5A(190) adds support for Hewlett Packard ROMAN8 as a file character-set and a terminal character-set. This is an 8-bit character-set roughly equivalent, but not identical, to Latin-1, and (of course) with entirely different encoding. The translations between HP ROMAN8 and Latin-1 are invertible. Commands: SET FILE CHARACTER-SET HP-ROMAN8 SET TERMINAL CHARACTER-SET HP-ROMAN8 ═══ 4.7. Script Programming ═══ Script programming has been enhanced by the addition of commands, variables, and functions. New IF Commands New \v() Variables New \f() Functions INPUT and OUTPUT Command Improvements The New MINPUT Command Other New or Improved Script Programming Commands ═══ 4.7.1. New IF Commands ═══ IF DIRECTORY name succeeds if name is the name of a directory or a file-structured device, fails otherwise. Edit 190. IF NEWER file1 file2 compares modification (or creation) date/times of two files, succeeds if first file is newer than second file. Edit 190. IF REMOTE-ONLY succeeds if C-Kermit was started with the -R (uppercase) command-line option, fails otherwise. This lets you advise C-Kermit that you only intend to use it in remote mode (which rarely, if ever, applies to OS/2 C-Kermit). IF EQUAL, IF LLT, IF LGT string comparison commands, as of edit 190, allow the use of braces around comparands that contain imbedded spaces, for example: IF EQUAL \%a {sentence with four words} echo They are equal. Prior to edit 190, constructions like this would cause a parse error (see p.239, Using C-Kermit). ═══ 4.7.2. New \v() Variables ═══ The following built-in variables have been added since Using C-Kermit was published: \v(charset) C-Kermit's local character set. Use this (e.g.) in scripts for deciding which character set to use when printing screen messages. \v(connection) When C-Kermit has made a SET LINE or SET HOST connection, this variable tells the connection type: "serial", "tcp/ip_telnet", "decnet_lat", "netbios", etc. If C-Kermit is in remote mode - i.e. it has not made a connection to another computer - the value of this variable is "remote". \v(cps) gives speed in characters (bytes) per second of the most recent file transfer. If a group of files was transferred, the figure applies to the whole group. \v(dialstatus) contains a numeric result code for the most recent DIAL command: -1 No DIAL command given yet 0 DIAL succeeded 1 Modem type not specified 2 Communication device not specified 3 Device can't be opened 4 Communication speed not specified 5 Hangup failure 6 Internal error (memory allocation, etc) 7 Device input/output error 8 DIAL TIMEOUT expired 9 Dialing interrupted by user 10 Modem not ready 11-19 (reserved) 20 Modem command error 21 Failure to initialize modem 22 Phone busy 23 No carrier 24 No dialtone 25 Ring (incoming call) 26 No answer 27 Disconnected 28 Answered by voice 29 Access denied, forbidden call 98 Unknown error 99 Unspecified failure detected by modem \v(evaluate) result of most recent EVALUATE command. \v(ftype) current FILE TYPE setting: "text" or "binary". In OS/2 and VMS, also "labeled". In VMS only, also "image". \v(keyboard) the keyboard model: "88", "101", or "122". \v(modem) current modem type (SET MODEM value). \v(parity) current PARITY setting: "even", "odd", "mark", "none", or "space". \v(newline) is the newline character or sequence appropriate to the operating system where C-Kermit is running, for example linefeed (\10) for UNIX, carriage return (\13) for OS-9, carriage-return linefeed (\13\10) for OS/2. \v(minput) a number telling which MINPUT search string was matched: 0 = none of them; 1 = the first one, etc. (see section on MINPUT below). \v(rexx) (OS/2 32-bit only) the return value from the last REXX command issued. \v(rows) the number of rows (lines) on the console terminal / screen, i.e. its length, -1 if unknown. \v(cols) the number of columns on the console terminal / screen, i.e. its width, -1 if unknown.. \v(terminal) terminal type, if known, otherwise "unknown". \v(query) the result of most recent REMOTE QUERY command. \v(space) number of free bytes on current storage device (OS/2 only). \v(startup) (OS/2 only) Disk:Directory from which C-Kermit was started. \v(sysid) Kermit system/OS code, from pp.275-278 of the Kermit book: U8 = MS-DOS (and Windows) U1 = UNIX D7 = VMS UD = OS-9 L3 = Amiga A3 = Macintosh UO = OS/2 F3 = AOS/VS K2 = Atari ST MV = Stratus VOS etc... ═══ 4.7.3. New \f() Functions ═══ The following functions were added since publication of Using C-Kermit: \Fdate(filename) returns the modification (or creation) date of the given file in "yyyymmdd hh:mm:ss" format, or else the empty string upon failure. Edit 190. \Freplace(s1,s2,s3). This function replaces all occurrences of the string s2 in the string s1 by the string s3. s1 and s2 must be at least one character long. s3 can be omitted, in which case all occurrences of s2 are removed from s1. If s2 is omitted, s1 is returned unchanged. Examples: \freplace(oofa,o,O) = OOfa \freplace(oofa,o,oo) = oooofa \freplace(oofa,o) = fa \freplace(oofa) = oofa or (more practically for OS/2): \freplace(\v(cmdfile),\\,/) ; replace back- by forward slashes \Fsize(filename) tells the size, in characters (bytes), of the given file. ═══ 4.7.4. INPUT and OUTPUT Command Improvements ═══ As of edit 190, the INPUT and OUPUT commands are buffered, which results in greater speed of execution. The new command: SET OUTPUT PACING number causes C-Kermit to pause for (at least) the indicated number of milliseconds (thousandths of a second) between each character in the OUTPUT string. Use this option when OUTPUT'ing characters to a device that can't receive characters at the full communication speed without losing or garbling them. The default OUTPUT PACING is 0, i.e. no pauses. Display with SHOW SCRIPTS. Edit 189. As of edit 190, the OUTPUT command string interprets \N as an indication to send a NUL (ASCII 0). ═══ 4.7.5. The New MINPUT Command ═══ The new command, MINPUT ("multiple input") is a version of the INPUT command that looks for more than one string. Syntax: MINPUT sec [ string1 [ string2 [ string3 [ ... ] ] ] ] Strings are separated by spaces. If any of the search strings is encountered within the timeout interval, the command succeeds and the \v(minput) variable is set to the number of the string that was found: 1, 2, 3, etc. If none of the search strings is found, the command times out, fails, and \v(minput) is set to 0. All SET INPUT paramaters apply - SET INPUT CASE, etc. Example: minput 30 Login: Username: Ready if success goto LBL\v(minput) end 1 Prompt didn't arrive. looks for any of the three strings "Login:", "Username:", or "Ready" and then goes to one of the labels "LBL1", "LBL2", or "LBL3", depending on which string was matched. To include a space in a string, enclose it in { braces }. minput 20 {a b} c This searches for either "a b" or "c". As in the regular INPUT and REINPUT commands, leading and trailing spaces are stripped from each search string unless it is enclosed in { braces }. Example: minput 20 { abc } {{ def }} ghi searches for " abc ", "{ def }", or "ghi". ═══ 4.7.6. Other New or Improved Script Programming Commands ═══ EVALUATE arithmetic-expression The new EVALUATE command evaluates arithmetic expressions for you, printing the answer. It is exactly like the \feval() function described in the book, but for interactive use: you can type the expression directly, and the answer is printed, e.g.: C-Kermit> evaluate 1+1 2 C-Kermit> eval 6! 720 C-Kermit> def \%a (7 + 8) C-Kermit> ev (1 + 2) * (\%a - 3) 36 FORWARD label Like GOTO, except the label search begins at the current position in the macro or command file, rather than at the beginning. It will not find labels that have already been passed. The major use for a command like this would be to improve the performance of script programs that contain a lot of forward GOTOs, especially when that program is a command file that will be executed from a diskette. This is obviously not good programming practice - since such programs can easily break of blocks of code are moved around - but then neither are GOTOs themselves. If the FORWARD label search fails in the current macro or TAKE file, the search continues in the forward direction only in superior macros macros and TAKE files. Note: The FORWARD command has been used extensively in the CKERMIT.INI file beginning with C-Kermit 5A(190), resulting in a dramatic decrease in startup time. GETC variable-name [ prompt-string ] The new GETC command (edit 190) lets a script program prompt the user to type a single character. Example: GETC \%a Press any key to continue: The character is stored in the given variable. WRITE-LINE file text This is exactly like the WRITE command, which is used to send the text to the specified file (FILE, SCREEN, PACKET-LOG, etc). The difference is that WRITE-LINE always formats the output text as a line, or record, appropriate to the underlying operating system's file format. This allows Kermit script programs to create text files in a system-independent fashion. Synonym: WRITELN. WR, WRI, and WRIT are still accepted as abbrevitions for WRITE. Also see the \v(newline) variable. Edit 190. COPY oldfilename newfilename Makes a new copy of the file. Edit 191. RENAME oldfilename newfilename The second argument (normally the new name for the file) is allowed to be a directory name (or, in OS/2, a device and directory name), in which case the file is moved to the given (device and) directory, keeping its original name. Edit 190. RETURN and END These commands may now be given, with the expected results, from within the command-lists of FOR, WHILE, or XIF commands. Edit 190. ASK and ASKQ These commands now allow question mark and backslash to be entered just like any other text character. Prior to edit 190, question mark would make a help message pop up, and backslash would fulfill its normal function of introducting a variable or quoting a special character. However, these commands are unlikely ever to be used by somebody who will reply to a question with a Kermit variable name and expect it to be evaluated. Nor should they be expected to "quote" question marks. This change makes for smoother dialogs between Kermit scripts and users, and it also allows users to type DOS-like filenames such as C:\TEMP\OOFA.TXT, which could not otherwise be entered except by doubling each backslash. However, script writers should note that the mere fact that a DOS path name can be entered into a variable via: ask \%f { Please type the DOS path name: } Please type the DOS path name: c:\123\files\widgets.wks does not mean that the resulting variable can be used bare and unprotected. For example: send foo.bar \%f will not do what you think, because the SEND command will evaluate \%f "too much" (in this case "\123" becomes becomes "{", i.e. ASCII character number 123, and \files looks like the beginning of a Kermit function, and results in a syntax error). The needed protection comes from \fcontents(): send foo.bar \fcontents(\%f) which is replaced by variable's definition ("contents") but does not evaluate it any further. ═══ 4.7.7. Using REXX ═══ As of edit 190, OS/2 C-Kermit (32-bit version only) has a REXX programming interface consisting of the single command, REXX. REXX executes the given REXX command, for example: REXX SAY "Hello" or: REXX RETURN "Goodbye" or: REXX CALL filename [ text ] which executes a REXX program from the given file. The text, if any, is passed to the REXX program, where it is available as ARG(1). A REXX command or program invoked via C-Kermit's REXX command can also execute C-Kermit commands from within REXX procedures that are invoked via C-Kermit's REXX CALL command, by enclosing them in single quotes, for example: 'set parity none' 'return \v(parity)' say rc The RETURN value from the REXX command or program is available in the C-Kermit variable \v(rexx). Set this by including a RETURN command in your REXX command or program. Q: Why would you want to use REXX from within C-Kermit? A: Many reasons:  Easier-to-use math functions  Running a REXX program without the overhead of starting a command shell  C-Kermit access to additional OS/2 specific functionality (e.g. Create WPS objects, perform directory searchs, ...)  Add your own functions to C-Kermit's script language There are three types of functionality provided in the C-Kermit/REXX interface: 1. Ability to execute a REXX command line. 2. Ability to execute a REXX command file. 3. Ability to call C-Kermit commands from a REXX program that is executing under C-Kermit. Let's say you want to execute a one-line REXX program from within C-Kermit. You would use the new C-Kermit "REXX" command. The format of the command is: rexx REXX-command where REXX-command is everything after the keyword REXX to the end of the line. A simple example: C-Kermit> rexx say "hello" executes the REXX command SAY with the parameter "hello", which prints the word "hello" on your screen. Another example, returning a value from REXX: C-Kermit> rexx return 4 * 4 the REXX command "return 4 * 4" calculates the value "16" and returns it to C-Kermit. C-Kermit stores the return value from the last REXX command in \v(rexx): C-Kermit> echo \v(rexx) 16 Let's say you want to execute a series of REXX commands, but you don't want to create a REXX command file: C-Kermit> rexx say "hello"\13 return 0 This prints the string "hello" and then returns the value "0" to C-Kermit. Notice that \13 (Carriage Return, Ctrl-M) was placed between the commands. This is necessary because REXX expects to find each command separated by a return character just as if it was being read from a file. To execute a REXX command file, use: C-Kermit> rexx call oofa.cmd where "oofa.cmd" is the name of your REXX command file. Now let's say you want to gain access to a C-Kermit variable value from within a REXX program, change a C-Kermit setting, or execute a C-Kermit command. You could alter your program so it is called in separate parts from a C-Kermit TAKE file or macro. But there is a better way. Just include the C-Kermit command in your REXX program. For example, you want to set Kermit's parity from within your REXX program: /* Beginning of REXX program file */ set parity "none" Let's say you want to set a REXX variable to the value of a C-Kermit variable: 'return \v(parity)' parity = rc Notice the single quotes around and the "return" command before the C-Kermit variable statement. REXX passes the quoted statement to C-Kermit for evaluation. C-Kermit interprets the command and returns to REXX the value of the parity variable. This value is then stored in the REXX special variable RC. RC stores the return value of all non-REXX commands. The next statement assigns the value of REXX variable RC to the REXX variable parity. Q: What happens if you create a REXX program file that contains C-Kermit commands and you try to execute it outside of the C-Kermit environment? A: A Syntax Error. This is because the C-Kermit commands are only available when C-Kermit is executing the REXX command file. Q: Can C-Kermit be used with REXX programming tools such as Watcom's VX-REXX? A: Yes and No. C-Kermit and VX-REXX work together too. To run a VX-REXX program from within C-Kermit, first generate a .VRM file and then invoke it with the C-Kermit REXX CALL command. However, the VX-REXX program is not allowed to make Presentation Manager calls, because VIO applications (like C-Kermit) can't do that. ═══ 4.8. External Protocols ═══ External Protocol packages supporting file transfer protocols other than Kermit are now supported in several ways. The REDIRECT Command New Macros for invoking external protocols ═══ 4.8.1. The REDIRECT Command ═══ Syntax: REDIRECT command [ arguments... ] Synonym: in Finland providing Xmodem, Ymodem, Ymodem-G and Zmodem send and receive capabilities on OS/2 via serial connections, available from most major ftp sites, bulletin board services and CompuServe. P200.INI P 2.05 is a newer release of P offering serial, IBM TCP/IP, and Named Pipe connections, available from the same sources. Version 2.05 of P was designed with C-Kermit in mind, and meshes naturally with C-Kermit's serial and network connection methods. The P200.INI file provides several macro variables which may be redefined at the C-Kermit> prompt to alter the buffer sizes and receive directory. M2ZMODEM.INI OS/2 M2ZMODEM, an external protocol package providing Xmodem, Ymodem, and Zmodem send and receive capabilities on OS/2 via serial connections. M2ZMODEM is a shareware program. Version 2.12 costs US$50. M2ZMODEM is available from various ftp sites, Bulletin Boards, CompuServe or directly from the author: M Wahlgren Software Dev. Kransen 4E S-416 72 Gothenburg SWEDEN Fax: +46 31 196417 Phone: +46 31 196074 CEXYZ2.INI CEXYZ/2 is shareware from Cutting Edge Computing, POB 90476, Burton, MI 48509, USA. Each of these command files defines the following macros: rz Receive with Zmodem protocol. sz Send with Zmodem protocol. ry Receive with Ymodem protocol. sy Send with Ymodem protocol. rg Receive with Ymodem-G protocol. sg Send with Ymodem-G protocol. rx Receive with Xmodem protocol. sx Send with Xmodem protocol. ═══ 4.9. New Command-Line Options ═══ Command-line options are commands that can be given to C-Kermit on the same line with which you invoke it, for example: kermit -s oofa.txt -p s Command-line help and error messages have been improved, and the following command-line options or new features have been added: -a name ("as-name" for a transferred file) now allows "name" to be a device or directory name, when used in conjunction with '-r' (RECEIVE), to specify a device and/or directory into which all incoming files are to be stored under the names they were sent with. If "name" is not a device or directory name, the (first) incoming file is stored under the given name, as before. Edit 190. -D n (where n is a number) is equivalent to the interactive command SET DELAY n (has no use in OS/2 C-Kermit). -N n (where n is a number) is the NETBIOS adapter number to be used with NETBIOS connections (32-bit version only). -R advises C-Kermit that it will be used in remote mode only. Of no use in OS/2 C-Kermit, which always operates in local mode. ═══ 4.10. Network Connections ═══ C-Kermit for OS/2 now contains a generous selection of networking options. Support is provided for the most commonly used networking protocols, including: TCP/IP NETBIOS Named Pipes DEC PATHWORKS LAN modem servers ═══ 4.10.1. TCP/IP Networking ═══ TCP/IP networking was added in edit 189, exactly as documented in Using C-Kermit (Chapters 3 and 4, etc) for the UNIX, VMS, and AOS/VS versions of C-Kermit. C-Kermit's TCP/IP support works with:  IBM TCP/IP 1.2.1 (C-Kermit edit 189 and later)  IBM TCP/IP 2.0 (edit 190)  IBM OS/2 WARP Internet Access Kit (IAK) (edit 190)  Essex Systems TCP/2 (edit 189 and later)  FTP Software's PC/TCP for OS/2 (edit 190)  IP-Switch Vantage IP (edit 190) TCP/IP support is not yet available for Novell LAN Workplace for OS/2. If a TCP/IP package includes an IBM- or TCP/2-compatible TCPIPDLL.DLL library, then C-Kermit should work with it. Support for other OS/2 TCP/IP packages will be added in future releases. These can be supplied in the form of small DLLs that can be installed after the fact, which C-Kermit 5A(190) will load automatically if you define the environment variable CKTCPIPDLL to indicate the pathname. Commands: SET NETWORK TCP/IP SHOW NETWORK SET HOST [ ip-name-or-address [ service ] ] SET HOST *:port TELNET [ I or \Ktn_ip in CONNECT mode (Interrupt Process) A or \Ktn_ayt in CONNECT mode (Are You There?) B or \Kbreak in CONNECT mode (Break) etc, the same as for UNIX, (Open)VMS, and AOS/VS. as described on pages 67-74 of Using C-Kermit. The SET HOST * port command is new to edit 191. It allows OS/2 C-Kermit to accept incoming TCP/IP connections on the given port, which should be a number other than 23. Once a connection has been made:  SERVER mode may be used for remote file transfers;  CONNECT mode may be used for chat operations; or  scripts/macros may be executed allowing an endless number of possibilities. In the UTIL subdirectory of the C-Kermit directory, you'll find two programs called TELNET and TELNETPM.EXE. These are "stubs" that let OS/2 applications such as Web Explorer/2 use C-Kermit in place of Telnet, by accepting Telnet command-line arguments (such as a hostname), translating them to C-Kermit syntax, and invoking C-Kermit with them. This way, any applications that think they are invoking TELNET or TELNETPM will actually be starting up C-Kermit to do the same thing, which has certain advantages (see below). If you would like to set your system up this way, just put TELNET.EXE and TELNETPM.EXE in a directory that is higher up in your OS/2 PATH than then real TELNET and TELNETPM programs. The SHOW NETWORK command tells which TCP/IP interface DLL was loaded, if any. If you think that a TCP/IP DLL should have been loaded, but it was not, you can find out why from C-Kermit's debug log: [C:\MYDIR] ckermit -d -Y See messages... C-Kermit> exit [C:\MYDIR] more < debug.log Hint: Remember that C-Kermit's TCP/IP interface DLLs must be kept in the same directory as C-Kermit itself (as noted in the READ.ME file, and as done by the install procedure). As of edit 191, the TELNET feature also has an added "window-size" negotiation capability, which lets C-Kermit automatically inform the TELNET server of its screen dimensions (if the remote TELNET server also supports this capability, known as NAWS, "negotiate about window size", use of which is negotiated automatically). On a TCP/IP TELNET connection, you should normally have PARITY set to NONE and FLOW-CONTROL also set to NONE. If file transfer does not work with these settings (for example, because the remote TELNET server only gives a 7-bit data path), use SET PARITY SPACE. Do not use SET PARITY MARK, EVEN, or ODD on a TELNET connection - it interferes with TELNET protocol. TELNET sessions are treated just like serial communications sessions as far as "terminal bytesize" and "command bytesize" are concerned. If you need to view and/or enter 8-bit characters during a TELNET session, you must tell C-Kermit to SET TERMINAL BYTESIZE 8, SET COMMAND BYTESIZE 8, and SET PARITY NONE. Edit 191 supports TELNET "binary mode", meaning that C-Kermit can negotiate binary mode with the TELNET server. This is rather complicated, obscure, and confusing, and so you should not even bother to read more about this unless you are having trouble with your TELNET connections. A TELNET connection is in Network Virtual Terminal (NVT) mode unless binary mode is negotiated. According to the TELNET specification, NVT mode means only 7-bit characters are allowed, and carriage returns must be sent as CRLFs. BINARY mode is generally taken to mean that 8-bit characters are allowed, and carriage returns are sent as-is. Unfortunately, there is little agreement among TELNET server implementations about just what binary mode means, nor, for that matter, how carriage returns are to be handled in binary more -- or for that matter, in NVT mode. C-Kermit 5A(191) lets you adjust to every conceivable (mis)interpretation of the rules using the following commands: SET TELNET BINARY-MODE { ACCEPTED, REFUSED, REQUESTED } ACCEPTED means "I will enter binary mode if asked." REFUSED means "I will refuse to enter binary mode if asked." REQUESTED means "I will actively request the TELNET server to enter binary mode." REFUSED is the default, and works in most situations. Some TELNET servers, however, might request binary mode, and if it is refused, certain types of file transfers or other operations might not work, or 8-bit characters might not be displayed (or sent) in CONNECT mode. In such cases, try logging out, then telling C-Kermit to "set telnet binary accepted", logging in again, and trying the same operations again. (By the way, in order to see and send 8-bit characters, you also must have PARITY set to NONE and TERMINAL BYTESIZE set to 8.) If you still have trouble with 8-bit characters or file transfer, then try "set telnet binary requested". SET TELNET NEWLINE-MODE { BINARY, NVT } { ON, OFF, RAW } This command was "strengthened" in edit 191 to allow the handling of carriage returns to be specified separately for binary mode and NVT mode. The default is ON (send CR as CRLF) in NVT mode and RAW (send CR as CR) in binary mode. If you experience troubles that seem related to carriage returns -- for example, screen lines overprinting each other, double spacing when there should be single spacing, failure of the host application to execute commands after you press the Enter key, etc, then escape back to the C-Kermit prompt, "show net" to see if your connection is in NVT or binary mode, and then try various TELNET NEWLINE settings for the indicated connection mode. When TELNET'ing into an OS/2 system, you should set your terminal type to ANSI. This is particularly important if you are going to use C-Kermit or TELNET on OS/2 system to establish a second connection out from the PC that you have TELNET'ed into. Users of IP-Switch Vantage IP may notice a brief TRANSMISSION BLOCKED message after typing the first character upon entering terminal mode. The blocked transmission does not result in any data loss or performance degradation as it only occurs only on the first typed character. If you SET TERMINAL DEBUG ON or SET DEBUG SESSION (same thing), TELNET protocol negotiations will be displayed on your screen. But most of the interesting negotiations happen at the time the SET HOST or TELNET command is given, before CONNECT mode is entered, so you won't see them on your screen. However, you can still capture them in the debug log ("log debug"). Q: Why use Kermit on a TCP/IP connection rather than TELNET and FTP? A: Many reasons: Unlike TELNET, C-Kermit can also transfer files. C-Kermit has a script programming language, a powerful key mapping facility, screen rollback, color selection, and many other amenities lacking in most TELNET programs. It also has a unique ability to translate character sets, both during terminal emulation and file transfer. Many services are coming on the Internet which do not provide FTP, but do provide Kermit file transfer. Q: Why is Kermit file transfer over a TCP/IP connection slower than FTP? A: Because the Kermit program on the remote end of the connection is probably not running directly on a TCP socket, but rather running underneath a TELNET server, usually on a pseudoterminal and under a login shell, with the vast amounts of per-character overhead all of that implies. Also Kermit does more than FTP, especially when transferring in text mode. Still, you can get reasonably fast transfer rates by using large window sizes, long packets, and control-character unprefix (but remember not to unprefix character 255!). ═══ 4.10.1.1. SOCKS 4.2 Client Support ═══ As of edit 191, C-Kermit provides support for SOCKS 4.2 servers when using IBM TCP/IP 2.0, IBM OS/2 WARP IAK, or a compatible protocol stack. SOCKS is one popular means of implementing a firewall between a private network and the Internet. C-Kermit shares the same SOCKS environment variables as IBM Gopher. It also supports the use of local SOCKS configuration files. To specify the default SOCKS Server, add SET SOCKS_SERVER= to your CONFIG.SYS file. If you must use a SOCKS Distributed Name Server, add SET SOCKS_NS= to your CONFIG.SYS file. If you must use a specific with your SOCKS server, be sure to add SET USER= to your CONFIG.SYS file. Otherwise, "os2user" will be used by default. The SOCKS configuration file must be placed in the directory pointed to by the ETC environment variable as declared in your CONFIG.SYS file. The name should be SOCKS.CONF. On a FAT file system, use SOCKS.CNF. The format of the lines in the SOCKS configuration file are as follows:  # comments  deny [*=userlist] dst_addr dst_mask [op port]  direct [*=userlist] dst_addr dst_mask [op port]  sockd [@=serverlist] [*=userlist] dst_addr dst_mask [op port] op must be one of 'eq', 'neq', 'lt', 'gt', 'le', or 'ge'. dst_addr, dst_mask, and port may be either numeric or name equivalents. C-Kermit ignores the [*=userlist] and [@=serverlist] fields. Matches are determined on a first match not a best match basis. Addresses for which no match is found default to "sockd". For completeness: Fields in square brackets are optional. The optional @=serverlist field with a 'sockd' line specifies the list of SOCKS servers the client should try (in the given order) instead of the default SOCKS server. If the @=serverlist part is omitted, then the default SOCKS server is used. Commas are used in the userlist and serverlist as separators, no white spaces are allowed. ═══ 4.10.1.2. Using C-Kermit to Make SLIP Connections ═══ Starting with edit 191, C-Kermit can be used instead of SLIPTERM for starting SLIP connections, providing more extensive serial device and terminal emulation support than that included in SLIPTERM. Once the SLIP driver has begun execution, run C-Kermit and select port SLIPCOMx as your serial port, where x is the serial port in use for the SLIP connection. C-Kermit will obtain access to the port from the SLIP driver and you may then use the port as necessary to log into your SLIP server and start a SLIP session. All of C-Kermit's features and capabilities are available for use over the serial line while C-Kermit has take control of the serial port. Upon exiting C-Kermit, the port is returned to the SLIP driver which will once again control the port, handling all SLIP traffic. Note that C-Kermit should not be used as part of an attachment script, which is started by the SLIP driver itself, but should be run as a separate command after the SLIP driver is started. Should scripting be required, you can use Kermit scripts (including the OS/2 C-Kermit REXX support as necessary) to perform the same tasks as an attachment script. As an example here are the relevant parts of three files for connecting to an unspecified host: CKSLIP.CMD /* SLIP connect command file using C-Kermit instead of SLIPTERM */ 'start slip -com1 -mtu 1500 -speed 57600 -rtscts -vj' 'slipwait' 'ckermit g:\ckermit\ckslip.ini' CKSLIP.INI ; SLIP Connect script for C-Kermit 5a(191) using BOOTP protocol set exit warning off ; make sure we can exit without a prompt set input case ignore ; ignore case when searching input fron host access ckslip ; use access macro to connect to host if failure goto fail ; if access failed, terminate SLIP attempt input 5 username ; wait for username prompt if failure goto fail ; if it doesn't arrive, terminate SLIP attempt output USERNAME\13 ; send Username to host input 5 password ; wait for password prompt if failure goto fail ; if it doesn't arrive, terminate SLIP attempt output PASSWORD\13 ; send Password to host input 5 slip ; wait for prompt to issue SLIP command if failure exit 1 ; if it doesn't arrive, terminate SLIP attempt output slip\13 ; send SLIP command to host set port 0 ; release the port back to the SLIP driver run bootp sl0 ; execute bootp to setup IP addresses, DNS, etc. exit 0 ; exit with success code CKERMIT.KSD ckslip nologin xxxxx call hayes slipcom1 57600 555-5555 If your host does not support BOOTP protocol, then you must use the INPUT command and the \v(input) variable with the ifconfig.exe program to setup your SLIP adapter configuration. ═══ 4.10.1.3. Using C-Kermit to Make PPP Connections ═══ Starting with edit 191, C-Kermit can be used instead of SLATTACH for starting PPP connections, providing terminal emulation support which is not available when using SLATTACH. Once the PPP driver has begun execution, run C-Kermit and select port PPPCOMx as your serial port, where x is the serial port in use for the PPP connection. C-Kermit will obtain access to the port from the PPP driver and you may then use the port as necessary to log into your PPP server and start a PPP session. All of C-Kermit's features and capabilities are available for use over the serial line while C-Kermit has take control of the serial port. Upon exiting C-Kermit, the port is returned to the PPP driver which will once again control the port, handling all PPP traffic. C-Kermit may be executed as part of a PPP "connect" parameter. As an example here are the relevant parts of three files for connecting to an unspecified host: CKPPP.CMD /* PPP connect command file using C-Kermit instead of SLATTACH */ 'ppp com1 57600 rtscts defaultroute connect "ckermit g:\ckermit\ckppp.ini"' CKPPP.INI ; PPP Connect script for C-Kermit 5a(191) set exit warning off ; make sure we can exit without a prompt set input case ignore ; ignore case when searching input fron host access ckppp ; use access macro to connect to host if failure exit 1 ; if access failed, terminate PPP attempt input 5 username ; wait for username prompt if failure exit 1 ; if it doesn't arrive, terminate PPP attempt output USERNAME\13 ; send Username to host input 5 password ; wait for password prompt if failure exit 1 ; if it doesn't arrive, terminate PPP attempt output PASSWORD\13 ; send Password to host input 5 ppp ; wait for prompt to issue PPP command if failure exit 1 ; if it doesn't arrive, terminate PPP attempt output ppp\13 ; send PPP command to host exit 0 ; exit and give success code to PPP.EXE CKERMIT.KSD ckppp nologin xxxxx call hayes pppcom1 57600 555-5555 ═══ 4.10.2. Using Named Pipes ═══ As of version 5A(190), OS/2 C-Kermit (32-bit) supports NAMED PIPES as an interprocess communication mechanism. Named Pipes support for local processes is built into OS/2. In order to use them to communicate across a local area network both computers must have installed Named Pipe network support software. Each computer may be a Client, a Server or both. Each server on a particular network has a unique Named Pipe Server Name assigned as part of the Named Pipe software installation. C-Kermit has been tested with the following products:  IBM LAN Server Requester (Client) to LAN Server (Server)  Microsoft LAN Manager Requester (Client) to LAN Manager (Server)  Novell NetWare Requester (Client) to Novell NetWare Requester (Server) To have a named pipe connection connection between two Kermit programs, one Kermit program must be the "server" and the other must be the "client". The server is the one that is started first, and which waits for a connection to come in from the client. The server is started this way: SET NETWORK NAMED-PIPE [ pipename ] SET HOST * If the pipename is omitted from the SET NETWORK NAMED-PIPE command, a pipename of "kermit" is used. "SET HOST *" means to wait for a connection to come in from another Kermit program. Then the client makes a connection to the server: SET NETWORK NAMED-PIPE [ pipename ] SET HOST servername where pipename is the pipename used by the server you want to communicate with (default "kermit"), and servername is the name of the server on the network. If you specify a servername of "." (period), this means your own computer; you can set up such local connections even if you don't have Named Pipes network support installed, e.g. between two copies of C-Kermit running in different windows. Both pipename and servername are case-independent, and can contain spaces. There is no particular restriction on what Kermit commands can be used on a named-pipe connection. Here are some useful scenarios: 1. The named-pipe server is in Kermit SERVER mode. Clients can perform SEND, GET, REMOTE, FINISH, and similar commands. 2. Both Kermit programs are in CONNECT mode, allowing two network users to "chat" with each other. Each user should give the following commands: set terminal echo local set terminal cr-display crlf connect To close a named-pipe connection, give the HANGUP command (or the SET HOST command, specifying no hostname) to either the client or the server. The C-Kermit named-pipe server can also wait for a client to connect. After the client disconnects, the connection will be reset to await the next client. This allows for the use of kermit "server" as a pseudo-FTP site for those without IBM TCP/IP. 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. ═══ 4.10.3. Using NETBIOS ═══ Added in edit 190: NETBIOS support, 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: 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 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 ═══ 4.10.3.1. NETBIOS Client and Server ═══ To have a NETBIOS connection connection between two Kermit programs, one Kermit program must the "server" and the other must be the "client". The server is the one that is started first, and which waits for a connection to come in from the client. The server is started this way: SET NETWORK NETBIOS [ localname ] SET HOST * If the localname is omitted from the SET NETWORK NETBIOS command, then if a HOSTNAME environment variable is defined, that is used; otherwise if a SYSTEMNAME environment variable is defined, that is used; otherwise "kermit" is used (the HOSTNAME variable is created by TCP/IP installation, SYSTEMNAME by DECnet PATHWORKS installation; if you don't have TCP/IP or PATHWORKS installed, you can add a "SET HOSTNAME=blah" or "SET SYSTEMNAME=blah" statement to your CONFIG.SYS file). The localname must be unique on the NETBIOS network; if not, the SET NETWORK command will fail. "SET HOST *" means to wait for a connection to come in from another Kermit program. Then the client makes a connection to the server: SET NETWORK NETBIOS [ localname ] SET HOST servername where localname is the new name used to identify the client Kermit session, and servername is the localname of the server's Kermit session. The localname and servername are case-dependent, and can contain spaces. There is no particular restriction on what Kermit commands can be used on a NETBIOS connection. Here are some useful scenarios: 1. The NETBIOS server is in Kermit SERVER mode. Clients can perform SEND, GET, REMOTE, FINISH, and similar commands. 2. Both Kermit programs are in CONNECT mode, allowing two network users to "chat" with each other. Each user should give the following commands: set terminal echo local set terminal cr-display crlf connect To close a NETBIOS connection, give the HANGUP command (or the SET HOST command, specifying no hostname) to either the client or the server. Unlike with TCP/IP connections, the C-Kermit NETBIOS server can wait for a client to connect. After the client disconnects, the connection will be reset to await the next client. This allows for the use of kermit "server" as a pseudo-FTP site for those without IBM TCP/IP. 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. ═══ 4.10.3.2. NETBIOS Configuration ═══ 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 unavailable, NETBIOS support for the current C-Kermit session will not be installed. The default settings for IBM and NetWare NETBIOS implementations are: ┌────────────────────┬────────────┬────────┬────────┬──────┐ │Product │Config File │Sessions│Commands│Names │ ├────────────────────┼────────────┼────────┼────────┼──────┤ │Novell (IPXNB) │NET.CFG │16 │32 │24 │ ├────────────────────┼────────────┼────────┼────────┼──────┤ │IBM NTS/2 (NETBEUI) │PROTOCOL.INI│5 │95 │21 │ └────────────────────┴────────────┴────────┴────────┴──────┘ The maximum settings for IBM and NetWare NETBIOS implementations are: ┌────────────────────┬────────────┬────────┬────────┬──────┐ │Product │Config File │Sessions│Commands│Names │ ├────────────────────┼────────────┼────────┼────────┼──────┤ │Novell (IPXNB) │NET.CFG │64 │128 │128 │ ├────────────────────┼────────────┼────────┼────────┼──────┤ │IBM NTS/2 (NETBEUI) │PROTOCOL.INI│254 │255 │254 │ └────────────────────┴────────────┴────────┴────────┴──────┘ 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 OS/2. It is possible to have two or more products each providing NETBIOS services by running multiple NETBIOS protocol stacks. 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. However, there are limitations. In particular, you can not successfully run Novell NETBIOS support with IBM Extended Services. The most common dual stack combination is of IBM Netbeui (LAPS) and Novell IPXNB (NetWare Requester). The installation procedure for each package is completely ignorant of the other protocol. The dual stack requires that the configuration files be manually modified with a text editor (e.g. E.EXE). The NETBIOS configuration is defined by statements in two files: NET.CFG and PROTOCOL.INI. These files contains statements defining how many NETBIOS Names, Commands, and Sessions are available to each protocol stack. The settings for each protocol stack must be consistent between the two files. For both protocols to coexist the following section to the must be added to the end of the PROTOCOL.INI file: [NETBIOS] DriverName=NETBIOS$ =,,,, =,,,, ... where: is ADAPTER0 through ADAPTER3. The adapter numbers must be used in sequence. is either ipxnb$ for Novell or netbeui$ for IBM. is almost always 0 since there is usually only one physical network adapter in the machine. , , and must match the settings in NET.CFG (NetWare NETBIOS section) if is IPXNB$; or PROTOCOL.INI (NETBEUI section) if is NETBEUI$. Without this additional section in PROTOCOL.INI, only IBM Netbeui will be available to C-Kermit. This section defines up to 4 virtual adapters (0-3), each of which is assigned a specific NETBIOS protocol stack implementation. C-Kermit allows you to choose which NETBIOS implementation you want to use by using the '-N' (note uppercase) command-line option. To use the driver assigned to ADAPTER1 in the [NETBIOS] section of PROTOCOL.INI use: ckermit -N 1 The syntax of the option is: -N adapter where adapter is one of the virtual adapter numbers (default = 0). It is important to know which NETBIOS protocol stack you are using as both machines must be using the same stack type for them to successfully communicate. The following provide examples of valid [NETBIOS] sections in PROTOCOL.INI. Example 1: Both IBM and Novell NETBIOS implementations and one physical adapter. Novell NETBIOS is the default. [NETBIOS] DriverName=NETBIOS$ Adapter0=ipxnb$,0,48,128,16 Adapter1=netbeui$,0,48,255,16 Example 2: Both IBM and Novell NETBIOS implementations and one physical adapter. IBM NETBIOS is the default. [NETBIOS] DriverName=NETBIOS$ Adapter0=netbeui$,0,48,255,16 Adapter1=ipxnb$,0,48,128,16 Example 3: Only Novell NETBIOS implementation and one physical adapter. [NETBIOS] DriverName=NETBIOS$ Adapter0=ipxnb$,0,48,128,16 Example 4: Both IBM and Novell NETBIOS implementations and two physical adapters. IBM NETBIOS is the default. (Novell NETBIOS cannot be assigned to two physical adapters.) [NETBIOS] DriverName=NETBIOS$ Adapter0=netbeui$,0,48,255,16 Adapter1=netbeui$,1,48,255,16 Adapter2=ipxnb$,0,48,128,16 ═══ 4.10.4. Using DECnet PATHWORKS ═══ DECnet LAT (Local Area Transport) support works in conjunction with DEC's PATHWORKS For OS/2 product version 2.3 or later, which must be installed, and LATCALLS.DLL must be in your LIBPATH. To make LAT connections from C-Kermit: SET NETWORK DECNET SET HOST hostname and then use all of Kermit's communication features - terminal emulation, file transfer, etc - in the same way you would on a serial or TCP/IP connection. If you experience difficulties transferring files that contain 8-bit data, use SET PARITY SPACE and/or use shorter packets. Reportedly, some character loss will occur in the underlying PATHWORKS transport, and sometimes even random disconnections; hopefully, this will be fixed in PATHWORKS 5.0. ═══ 4.10.5. Using Asynchronous Communication Servers ═══ There are two methods for using remote modems accessed via LAN server (asynchronous communication server): 1. Map the remote port (modem) to a local port name (e.g. COM3) with a NET USE command before starting Kermit, and then unmap it afterwards: net use com3 \\server\modem ckermit -l com3 net use com3 /d 2. Simply use the Universal Naming Convention (UNC) resource name as the port name: ckermit -l \\server\modem Because backslash (\) is a special command character, use one of the following forms at the C-Kermit prompt or in a command file or macro: set line //server/modem or: set line \\\\server\\modem or: set command quoting off set line \\server\modem set command quoting on ═══ 4.10.6. Networking Hints and Tips ═══ 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: 1. TCP/IP 2. DECnet 3. Named Pipes NETBIOS cannot be a default choice because it requires a user-assigned name. On a TCP/IP TELNET connection, you should normally have PARITY set to NONE and FLOW-CONTROL also set to NONE. If file transfer does not work with these settings (for example, because the remote TELNET server only gives a 7-bit data path), use SET PARITY SPACE. Do not use SET PARITY MARK, EVEN, or ODD on a TELNET connection - it interferes with TELNET protocol. TELNET sessions are treated just like serial communications sessions as far as "terminal bytesize" and "command bytesize" are concerned. If you need to view and/or enter 8-bit characters during a TELNET session, you must tell C-Kermit to SET TERMINAL BYTESIZE 8, SET COMMAND BYTESIZE 8, and SET PARITY NONE. If you SET TERMINAL DEBUG ON or SET DEBUG SESSION (same thing), TELNET protocol negotiations will be displayed on your screen. But most of the interesting negotiations happen at the time the SET HOST or TELNET command is given, before CONNECT mode is entered, so you won't see them on your screen. However, you can still capture them in the debug log ("log debug"). ═══ 4.11. 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. IBM's TELNET server provides limited functionality for emulating an OS/2 full screen session on a VT100 or ANSI Telnet terminal. Due to the limitations of the ASCII character set not all keyboard keystrokes may be replicated across the Telnet session. The OS/2 VIO programming interface used in the design of text applications does not map well to character based terminal devices. Therefore you will notice slow performance. The optimal terminal emulation to use from C-Kermit is ANSI. You can use C-Kermit's SET TERMINAL TYPE ANSI command, or its SET TELNET TERMINAL-TYPE ANSI command. 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). To avoid this place AUTOFAIL=YES into your CONFIG.SYS file. 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 due to restrictions in the OS/2 TELNET server. 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. ═══ 4.12. Using Kermit software instead of Lap-Link ═══ Lap-Link software is typically used to synchronize the versions of files found on two separate computers by transfering files across either a direct serial port or parallel port connection. C-Kermit and MS-DOS Kermit are well designed for this task. The SET FILE COLLISION UPDATE command may be used to instruct C-Kermit to only transfer files that are new or have changed. The XSEND command allows entire directory trees to be sent from one system to another. In addition, C-Kermit's SET FILE TYPE LABELED and SET FILE LABEL {ARCHIVE, EXTENDED, HIDDEN, READ-ONLY, and SYSTEM} commands can be used to specify which file attributes including extended attributes should be transfered. This is particularly useful when backing up changes to an OS/2 desktop from one system to another. With the use of a Parallel Port NDIS driver, C-Kermit can use its network support to take advantage of high speed parallel port connections. (Savant Software, Inc. sells parallel port drivers for OS/2 and DOS: floyd@savant.com, or P.O. Box 201015, Austin, TX 78720-1015.) Just add either the TCP/IP or NETBIOS protocol stacks to the Parallel Port MAC in IBM LAPS or IBM MPTS. Then tell C-Kermit to SET NETWORK TCP/IP or NETBIOS depending on which you want to use. Standard Lap-Link cables are supported. ═══ 5. OS/2 C-Kermit Utilities ═══ Starting with edit 191, OS/2 C-Kermit comes with two utilities:  OS/2 C-Kermit PM Clipboard Server  IBM Telnet Replacements ═══ 5.1. OS/2 C-Kermit PM Clipboard Server ═══ Since C-Kermit is not a PM application its ability to access the PM Clipboard is extremely limited. In fact, according to IBM documentation, it shouldn't be possible at all. However, C-Kermit by itself since release 190 has given users the ability to copy data into the PM Clipboard for use by other applications. It also was able to retrieve data from the PM Clipboard whenever the data was placed there by an application using a type of shared memory known as GETABLE shared memory. As of release 191, C-Kermit ships with a utility program, "ckoclip.exe", which is stored in the C-Kermit UTIL subdirectory. This PM Application when active acts as an agent for all active C-Kermit sessions enabling C-Kermit to copy and paste text data to and from the clipboard with full compatibility with other OS/2 PM applications (eg. TWCP and ManyClip). Now the \KPaste kverb can paste text data copied to the clipboard from all PM and Win-OS2 applications and the \KMarkCopyClip kverb will paste text into a ManyClip Clipboard. It is recommended that users place a shadow of the OS/2 C-Kermit PM Clipboard Server program object into their Startup folder (located within the OS/2 System folder.) By doing this a single copy of the Server will be started each time OS/2 is loaded. When not in use, the server uses zero CPU time and its memory will be paged to the swapfile. ═══ 5.2. IBM Telnet Replacements ═══ When navigating the World Wide Web using IBM WebExplorer you may often come across Web links which require the use of a Telnet client. Unfortunately, IBM WebExplorer does not allow you to configure it to use a Telnet client other than IBM TelnetPM. This is because IBM WebExplorer must provide information to the Telnet client via the command line. Therefore, it uses the command line format provided by IBM Telnet and IBM TelnetPM. However, if you wish to use C-Kermit as your Telnet client during your travels along the World Wide Web all is not lost. As of edit 191, C-Kermit ships with a utility known as the IBM Telnet Replacement. This utility can be found in the C-Kermit UTIL directory under the name "ckotel.exe". "ckotel.exe" provides a command line interface that is identical to that provided by IBM Telnet and IBM TelnetPM. It converts the command line options into a command string that is then passed to C-Kermit. To install the IBM Telnet Replacement utility the following steps must be taken: 1. Copy "ckotel.exe" to the C-Kermit directory using the name "telnet.exe". From the C-Kermit UTIL directory: COPY CKOTEL.EXE ..\TELNET.EXE 2. Copy "ckotel.exe" to the C-Kermit directory using the name "telnetpm.exe". From the C-Kermit UTIL directory: COPY CKOTEL.EXE ..\TELNETPM.EXE 3. Edit the SET PATH = statement in the "config.sys" file and make sure that the C-Kermit directory appears before the TCPIP\BIN directory. Now whenever a program attempts the start IBM Telnet, C-Kermit will be started instead. This includes the any Telnet program objects that you may have defined for specific hosts. To remove this option, simply delete the "telnet.exe" and "telnetpm.exe" files from your C-Kermit directory. ═══ 6. OS/2 Hints and Tips ═══ OS/2 is a complex operating system. Hints and tips are provided to make your use of C-Kermit on OS/2 more enjoyable and productive. C-Kermit and the OS/2 Work Place Shell Serial Port Performance OS/2 Devices, Files, and Shells Running C-Kermit in the Background Applications that Freeze ═══ 6.1. C-Kermit and the OS/2 Work Place Shell ═══ You can use the Program page in the Settings notebook of the C-Kermit program object to enter parameters that will affect the way the program starts. C-Kermit does not normally need parameters when it is opened. You can add C-Kermit to the pop-up menu for a folder object (e.g. the Desktop) so you can start that program by selecting the choice on the pop-up menu. However, when you start C-Kermit, OS/2 sends any parameters to the program. OS/2 considers the name of a folder a parameter, so OS/2 sends the folder name to the program when you select a program-name choice from the pop-up menu. C-Kermit cannot accept a folder name as a parameter. If you try to start C-Kermit from the pop-up menu of a folder and the program does not start or displays an error message, you can stop the name of the folder from being sent to the program by doing the following: 1. Display the pop-up menu for the C-Kermit program object that was referenced when you added the C-Kermit to the pop-up menu. For example, you might have dragged the "OS/2 C-Kermit (32-bit)" object from the C-Kermit folder to the Menu page of the Settings notebook for the Desktop folder. If so, display the pop-up menu for "OS/2 C-Kermit (32-bit)" in the C-Kermit folder. 2. Select Open. 3. Select Settings. 4. Select the Program tab. 5. Type the following in the Parameters field: % 6. Close the Settings notebook. If you have updated the Dialing Directory or Services Directory to include entries for each of the various systems you connect to you can further automate the process of connecting by creating Program Objects for each services directory or dialing directory entry. To create the new object: 1. Display the pop-up menu for the "OS/2 C-Kermit (32-bit)" object in the C-Kermit folder. 2. Select Copy 3. Edit the New name field to be the name of the service (e.g. xyzcorp.com). 4. Press Copy 5. Display the pop-up menu for the object you just created. 6. Select Settings 7. Type the appropriate string in the Parameters field. For a Services Directory entry type: -C "access [Password:], connect" % For a Dialing Directory entry type: -C "dial , connect" % When double clicking on a Services Directory object you would first be prompted for the appropriate password prior to C-Kermit's connecting to the designated service. The Work Place Shell provides special parameters which may be passed to filenames to C-Kermit. These parameters are replaced with the filename at startup. They are used for drag and drop operations or file associations. %* Inserts the drive letter, path, and file name of a program into the parameter list %**P Insert drive and path information without the last backslash (\). %**D Insert drive with ':' or UNC name. %**N Insert file name without extension. %**F Insert file name with extension. %**E Insert extension without leading dot. In HPFS, the extension always comes after the last dot. ═══ 6.2. Serial Port Performance ═══ 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 16550AFN 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. ═══ 6.3. OS/2 Devices, Files, and Shells ═══ 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. ═══ 6.4. Running C-Kermit in the Background ═══ When Kermit is performing a long file transfer or lengthy script-based operation, you can have Kermit proceed with its work in the background while you work on something else in the foreground. Out of the box, OS/2 is tuned to favor foreground applications, which is fine if the background applications will not be performing time-critical operations or be expected to perform consistent screen updates. But Kermit does both, and so we need a way to tell OS/2 to let it run at a reasonable speed even while we do other work in the foreground. There are two settings in the CONFIG.SYS file which affect how OS/2 determines the priority of applications which are competing for CPU time and File I/O Services: PRIORITY The default value is DYNAMIC, which gives a priority boost to all foreground applications. This effectively reduces the priority of all background applications. If you want your applications to have equal access to the CPU regardless of the foreground/ background status, set the value to ABSOLUTE. PRIORITY_DISK_IO The default value, YES, gives the foreground process priority service. If your foreground process is performing a significant amount of disk access (such as a database search, compile, a long directory listing, or printing to the spooler) this will have a severe impact on your background file transfers. Try setting this this value to NO. Other settings that also affect the performance of OS/2 are: MAXWAIT How long a process may starve before it gets a priority boost to allow it to gain access to the CPU. The standard value is 3 seconds which is probably adequate for most users. THREADS How many threads may be created on a the system. The default value is 256. The larger the number of threads the greater the overhead. However, lowering this number might result in fewer programs being able to run simultaneously. OS/2 applications, such as C-Kermit, that need to do many things at once (e.g. watch the keyboard and port and the mouse) use several threads. C-Kermit uses anywhere from two to eight threads depending on its current operating mode. You can count the number of threads active in the system at a particular time by using PSTAT . Pipe the output of PSTAT to a file and count the number of lines in the "Process and Thread Information" section. Do it under a heavy load to determine how many threads you really need. TIMESLICE The minimum and maximum amounts of time that a thread may have access to the CPU before yielding it to another thread. IBM recommends a maximum value of 125 milliseconds when using communications software (see OS/2 Command Reference) . Suggested setting is "32,125". SWAPPATH The location and original size of your swapfile (SWAPPER.DAT). It is strongly recommended that you move your swapfile, if you have multiple drives or partitions, to the root directory of the most-used partition on the least-used drive. Then increase the initial size value to 4096 larger than you have ever seen the swapfile grow to. After making this change to your CONFIG.SYS file, shutdown and reboot. If you have moved the SWAPPER.DAT file to a new drive or directory, delete the file SWAPPER.DAT from the \OS2\SYSTEM directory on your boot drive. Next, if you placed the swapfile on a FAT partition, boot DOS and execute a Disk Optimizer such as Norton's Speedisk.exe. Optimize the disk so that the swapfile is the first file on the partition and is contiguous. Disk caching is extremely important and can have a dramatic affect on the performance of your computer. Disk caches in OS/2 are allocated separately for each type of file system: FAT , HPFS , and CDFS . When configuring your cache do not set the cache size to be high if you have a small amount of RAM (less than 16MB). Be sure to turn on Lazy Writes. If you never run DOS or Windows programs, set PROTECTONLY =YES. This will give OS/2 640k more physical memory to use for your OS/2 applications. For additional information on all of the above topics read the OS/2 Command Reference in the Information folder on your OS/2 Desktop. Further information on tuning OS/2 can be found in: "Stupid OS/2 Tricks" from Internet: m-woo@uiuc.edu OS/2 WARP FAQ from Timothy Sipples, tsipple@vnet.ibm.com These files and more are available from most OS/2 ftp sites, BBS, and online services under a variety of names. ═══ 6.5. Applications that Freeze ═══ There have been isolated reports of C-Kermit "freezing" 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). ═══ 7. Modems and Dialing ═══ First, a Frequently Asked Question (FAQ) and its answer: Q: How can I make Kermit keep redialing until the connection is made? A: Just use the XDIAL macro, defined in the standard CKERMIT.INI file. Example: C-Kermit> xdial 7654321 XDIAL is just like the DIAL command, except it automatically redials every 30 seconds until the connection is made or until it is interrupted. You can interrupt it from the keyboard by typing Ctrl-C (you might have to type two or three of them). The list of modem types supported by C-Kermit is obtained by typing: C-Kermit> set modem ? at the C-Kermit> prompt. If you have a high-speed, error-correcting, data-compressing modem, you should generally use the following settings: set speed 57600 ; Or 38400, the highest supported by Kermit and the modem set dial speed-matching off ; Use speed buffering. set dial error-correction on ; Enable error correction. set dial compression on ; Enable data compression. set flow rts/cts ; Use hardware flow control. Always use hardware flow control if it is available (some operating systems do not support it). If it is not, use Xon/Xoff ("software") flow control between your computer and the modem, which means you must tell C-Kermit to "set flow xon/xoff" and you must configure your modem for this too. If you have a modem that is not directly supported by C-Kermit, you can define a new modem type for it. For example, suppose you have a Practical Peripherals PM14400FXMT V.32bis/V.42/V.42bis/MNP modem and you want to take full advantage of its features. You can dial with this modem, taking advantage of the support for Hayes-like modems that is already built into C-Kermit, but substituting an initialization string particular to the PP14400: set modem hayes ; Use Hayes-like dialog set line ; Select the device your modem is on set speed 57600 ; Use high interface speed set dial speed-matching off ; Lock the interface speed set flow rts/cts ; Use hardware flow control set dial init ATQ0S2=43N1S37=11&&Q5S36=7S46=2S82=128\13 where: Q0 Result codes enabled S2=43 Escape character is "+" N1 Enable modulation negotiation S37=11 Enable V.32.bis &K3 Enable RTS/CTS &Q5 Enable error correction S36=7 and compression with S46=2 automatic speed buffering S82=128 Pass BREAK signals through This can be turned into a dialing macro, PPDIAL, which you can use in place of the DIAL command: define PPDIAL - set modem hayes, - set port 1, - ; Change this appropriately set speed 57600, - set dial speed-matching off, - set dial init ATQ0S2=43N1S37=11&K3&Q5S36=7S46=2S82=128\13, - dial \%1, - if success set flow rts/cts, - ; (If your C-Kermit version supports it) else end 1 If you put this definition into your CKERMOD.INI file, then it will always be available for you to use, for example: C-Kermit> ppdial 7654321 And you can also use REDIAL in the normal way. See your modem manual for details about initialization strings. Most modern modems should be set up as in the example above but, naturally, the specific modem commands differ. Here are some sample modem initialization strings that should obtain settings equivalent to those made for the PP14400, for various other types of high-speed, error-correcting, data-compressing modems that are not specifically supported by Kermit's DIAL command. The maximum speed is shown after the modem name. These are offered in a form suitable for use in the SET DIAL INIT-STRING command (modem-command backslashes doubled, \13 at the end for carriage return), but with no guarantees - see your modem manual for explanations of the commands and for further details. Each of these initialization strings attempts to:  Start modulation negotation at V.32bis (14400bps), enabling fallback.  Fix the interface speed at 57600 or 38400 bps.  Enable error correction and compression, enabling fallback.  Allow BREAK signals to be passed through transparently. AT&T DataPort 14400, 57600 bps: AT Q0 X6 &C1 &D2 &Q0 S84=0 \\Q3 %B14400 S41=1 S78=0 \\N7 %C1 \\K5\13 Boca 14.4 Faxmodem, 57600 bps: AT Q0W1&D2X4 S95=47 F10 S37=11 N1 &K3 S82=128 &Q5 S36=7 S46=138 \\N3 S48=7\13 Hayes Ultra 144, 38400 bps: AT Q0W1X4 S87=28 &D2 S95=46 S37=11 N1 &K1 &K3 &Q5 S36=7 S38=1 S46=2 S48=7\13 Multitech MT1432, 57600 bps: AT Q0 &Q1 X4 $SB57600 $MB14400 &E4 %E1 &E1 &E15 $BA0\13 Practical Peripherals 14400FXMT, 57600 bps: AT Q0 W1 S95=47 &D2 X4 S2=43 N1 S37=11 &K3 &Q5 S36=7 S46=2 S82=128\13 USR Sportster or Courier, 57600 bps: AT Q0 &S0 X4 &A3 &D2 &B1 &H1 &R2 &N0 &K1 &M4 &Y3\13 Zoom Telephonics 14400, 57600 bps: AT Q0 W1 &D2 S95=47 X4 S37=11 &K3 S82=128 &Q5 S36=7 S46=138 S38=1\13 Zyxel U-1496E, 57600 bps: AT Q0 L1 S11=55 S0=0 V1 E1 &D2 X5 &N0 N1 &H3 &Y1 &K4\13 CAUTION: Reportedly, these strings might be too long for some modems. If that is the case with yours, you can do one of the following:  Shorten the string by removing spaces and/or commands that are not necessary because they correspond to your modem's normal settings.  Change your dialing macro to simply OUTPUT these commands in small groups before issuing the DIAL command. NOTE: You can find copies of the strings in the sample CKERMOD.INI file that is distributed with C-Kermit 5A(191) or later. ═══ 7.1. Dialing Hints and Tips ═══ Remember: You can't CONNECT to a modem and type the modem's dialing command (like "ATDT7654321") manually, unless you first tell C-Kermit to: SET CARRIER OFF This is because the CONNECT command requires the modem's Carrier Detect (CD) signal to be on, but the CD signal doesn't come on until after dialing is complete. This requirement is what allows C-Kermit to pop back to its prompt automatically when the connection is hung up. See the description of SET CARRIER in Using C-Kermit. Similarly, if your dialed connection drops when CARRIER is set to AUTO or ON, you can't CONNECT back to the (now disconnected) screen to see what might have happened unless you first SET CARRIER OFF. Automatic redialing: The XDIAL macro, defined in the standard CKERMIT.INI file for version 5A(191), is like the DIAL command, but keeps redialing every thirty seconds until it gets an answer, or until you interrupt it by typing Ctrl-C (several Ctrl-C's might be needed). define keep_on_dialing dial \%1, while failure { sleep 30, redial } Don't SET FLOW RTS/CTS if your modem is turned off, or if it is not presenting the CTS signal. Otherwise, the serial device driver might get stuck waiting for this signal to appear. When dialing, it is better to give the SET FLOW RTS/CTS command after the DIAL command than before it. Here are a few points to clarify the purpose of SET DIAL SPEED-MATCHING: 1. This command does not do anything at all to the modem. Rather, it is used to inform C-Kermit about the modem's configuration: whether the modem's interface speed is "fixed", or it changes its interface speed when a connection is made. In the latter case, C-Kermit changes its own speed in response to the speed given in the modem's CONNECT message. By default, SPEED-MATCHING is OFF, so Kermit does not attempt to change its speed. If your modem changes its interface speed to match the negotiated connection speed, you must SET DIAL SPEED-MATCHING ON. 2. When DIAL SPEED-MATCHING is ON: a. Your modem must be configured to report its *interface* speed in the CONNECT message, rather than the connection (modulation) speed. b. Your computer (and C-Kermit) must support all connection speeds that might be reported by your modem. SET SPEED ? will give you a list of the speeds that your version of C-Kermit knows about. 3. If conditions (a) and (b) cannot be satisfied, then you must: a. Configure your modem to lock its interface speed b. Tell C-Kermit to SET DIAL SPEED-MATCHING OFF If you have a high-speed, error-correcting, data-compressing, speed-buffering modem, you should always SET DIAL SPEED-MATCHING OFF, and you should fix the modem's interface speed as high as possible, preferably four times higher than its maximum connection (modulation) speed to allow compression to work at full advantage. In this type of setup, you must also have an effective means of flow control enabled between C-Kermit and the modem, preferably hardware (RTS/CTS) flow control. C-Kermit knows about a large number of modems, depending on how it was built (type "set modem ?" and "show features" for further info). This knowledge is imbedded in the SET MODEM and DIAL commands. If you are having trouble dialing your modem, SET DIAL DISPLAY ON to watch the dialing interactions between C-Kermit and your modem. Consult pages 65-66 of Using C-Kermit for modem-dialing troubleshooting instructions. If it takes your call longer to be completed than the timeout interval that C-Kermit calculates, you can use the SET DIAL TIMEOUT command to override C-Kermit's value. But beware: the modem has its own timeout for completing the call. If it is a Hayes-like modem, C-Kermit adjusts the modem's value too by setting register S7. But the maximum value for S7 might be smaller than the time you need! In that case, C-Kermit sets S7 to 0, 255, or other (modem-specific) value to signify "no timeout". WARNING: Certain modems might have a maximum dial timeout shorter than what Kermit expects it to be. If Kermit attempts to set register S7 to a value higher than your modem's maximum, the modem will say "ERROR" and you will get a "Failure to initialize modem" error. In that case, use SET DIAL TIMEOUT to override C-Kermit's calculation of the timeout value with the highest value that is legal for your modem, e.g. 60. How to DIAL from a TCP/IP reverse terminal server (modem server): 1. (only if neccessary) SET TELNET ECHO REMOTE 2. SET HOST [ ] 3. SET MODEM 4. (only if necessary) SET DIAL HANGUP OFF 5. DIAL The order is important. Although various modem-dialing strings are configurable, the DIAL MODEM-HANGUP string is not. For Hayes and Hayes-like modems it is ATQ0H0; the Q0 is to ensure that a result code is produced. In case the Q0 interferes with your normal setup (for example, if you keep your modems set to Q2), and dropping the connection does not restore the normal connection, you can define Kermit's ON_EXIT macro to send the appropriate modem configuration commands when Kermit exits, for example: define on_exit if > \v(local) 0 output ATQ2\13 The SET DIAL KERMIT-SPOOF command works only for Telebit and US Robotics modem types; it is OFF by default. You may wish to experiment with large packets (1K or greater) and various window sizes with spoofing disabled in the modem. In most situations the transfer rates achieved by Kermit with sliding windows and long packets are better than with protocol spoofing turned on. Also, attribute (A) packets are not passed by current Telebit modems with spoofing enabled so if they are desired spoofing must be turned off. If C-Kermit's dialing methods are insufficient for your purposes, you can write a C-Kermit script program to do the dialing. Or you can use (or write) another program to accomplish the dialing, and then run C-Kermit "underneath" your dialing program by giving it the open file descriptor: kermit -l n -m unknown where n is the numeric file descriptor. Note: When you give a SET DIAL DIRECTORY command, C-Kermit keeps your dial directory file open until you give another SET DIAL DIRECTORY command, or until you EXIT. So, for example, you can't edit the dialing directory while you have it open. If you want to edit the dialing directory from within Kermit, you can close it by giving a SET DIAL DIRECTORY command with no file name. Then you can open it again with SET DIAL DIRECTORY filename. ═══ 7.2. Hayes and Compatible Modems ═══ C-Kermit should work correctly with Hayes and other modems that use the AT command set. These include Hayes 1200, Hayes 2400, and Hayes 9600 bps modems, compatibles, as well as Telebit and HST modems. See the next section for Telebit information. C-Kermit sends AT commands to the modem and then reads the modem's response. The software is designed to work whether the modem is configured to echo its commands (E1) or not (E0), and whether it replies with numeric (V0) or word (V1) result codes. C-Kermit does not change the echoing state or result code mode of the modem. However, C-Kermit issues the Q0 command to the modem to ensure that it does produce result codes. C-Kermit assumes the modem's Command Line Terminator (S3) is 13 (carriage return). If it isn't, C-Kermit's dialog with the modem probably won't work correctly. ═══ 7.3. Telebit Modems ═══ There are numerous Telebit modem models, with differing capabilities and features. C-Kermit tries to support them all in a model-independent way. To use a Telebit modem, any model, SET MODEM as follows: TELEBIT Dial and attempt to connect using the highest protocol appropriate to the interface speed between the computer and the modem, and fall back automatically to the highest protocol and speed supported by the answering modem. For example, if your interface speed is 19200 bps and you have a PEP-capable Telebit, it will start in PEP mode, fall back to one of the 2400-bps standards, then one of the 1200 bps standards, etc, depending on its configuration (see your Telebit manual). PEP-TELEBIT Dial in PEP mode, and connect only if the remote modem answers in PEP mode. Does not work with Telebit models that do not support PEP. See Table III. V32-TELEBIT Dial in V.32 mode (9600 bps), fall back from there. Works only with Telebit models that support V.32; see Table III. NOTE: V.32 calls are supposed to work no matter what your interface speed is, but it has been observed that when calling certain non-Telebit V.32 modems, the connection is not made successfully unless C-Kermit's interface speed to the Telebit is 9600. V42-TELEBIT Enable V.42 error correction, allowing fallback to MNP, and from there to direct (no error correction). NOTE: Fallback to MNP from V.42 is allowed even if DIAL MNP-ENABLE is OFF. Works only with Telebit models supporting V.42 error control. See Table III. SLOW-TELEBIT Dial at 2400 bps (V.22bis), fall back from there. Before attempting to use Telebits at high speeds, there is one problem you should be aware of: Most Telebit models do not "autobaud" at speeds higher than 19200 or 38400. If you want to make a high-speed call on such a modem, you must access it first at a lower speed, then give it a command to change to a higher speed, and then change Kermit's speed to match. For example, on the Telebit T3000: C-Kermit> set speed 19200 C-Kermit> connect AT (make sure it can read you) OK (it can) ATS51=7 (change it to 57600 bps) OK (it says OK, then changes its speed) Alt-x (escape back to Kermit) C-Kermit> set speed 57600 (set Kermit to agree) Of course, you can automate this process using a script program. Or if you always want to dial out at 57600, you can save this setting in the modem, and then it will always use this speed (and won't autobaud any more). Telebit modems come in many models that differ not only as to features but also which commands control which features. The features, commands, and acceptable S-register values (and their meanings) can vary not only among models, but even among different ROM versions on the same model. Rather than have dozens of separate SET MODEM TELEBIT-xxx commands, C-Kermit queries the modem for its model number with an ATI command, and then adjusts its modem commands accordingly. Responses to the ATI command are shown in Table I. ------------------------------------------------------------------------- Table I: Telebit Modem ATI Command Responses ------------------------------------------------------------------------- ATI Model Numbers Examples --- ------------- -------- 123 Telebit in "total Hayes-1200" emulation mode 960 Telebit in Conventional Command (Hayes) mode 961 RA12C IBM PC internal original Trailblazer 962 RA12E External original Trailblazer, DCA Fastlink, or Racal-Milgo RM1822 963 RM12C Rackmount original Trailblazer 964 T18PC IBM PC internal Trailblazer-Plus (TB+) 965 T18SA, T2SAA, T2SAS External TB+, T1600, T2000, T3000, WB, and later or Ven-Tel Pathfinder EC18K (see below) 966 T18RMM Rackmount TB+ 967 T2MC IBM PS/2 internal TB+ 968 T1000 External T1000 969 ? QBlazer 971 T25SA External T2500 or T1500 (see below) 972 T25RM Rackmount T2500 ------------------------------------------------------------------------- Certain incompatible models show the same response to ATI. The ATI3 command is used to differentiate among them, as shown in Table II. ---------------------------------------------------------------------- Table II: Telebit Modem ATI3 Command Responses ---------------------------------------------------------------------- ATI If ATI3 Response Response Contains Telebit Model Is -------- --------------- ---------------- 965 "T1600" T1600 965 "T3000" T3000 965 "World" WorldBlazer 965 "Version B" TrailBlazer-Plus or T2000 external version 1 965 "TBSA" TrailBlazer-Plus or T2000 external version 2 965 "TBRM" TrailBlazer-Plus or T2000 rackmount version 2 965 "DC" Ven-Tel Pathfinder EC18K (= TB+ version 1) 971 "T1500" T1500 971 (anything else) T2500 ------------------------------------------------------------------------ The features of the various models and the commands used by Kermit to control them are shown in Table III. The commands in the PEP column are used to force PEP and allow compression (SET MODEM PEP-TELEBIT). The commands in the V.32 column are used with SET MODEM V32-TELEBIT. The commands in the V.42 column are used with SET MODEM V42-TELEBIT. The commands in the MNP column are used if SET DIAL MNP-ENABLE is ON and the modem type is TELEBIT, PEP-TELEBIT, or V32-TELEBIT, SLOW-TELEBIT, but not V42-TELEBIT; if SET MNP-ENABLE is OFF, the S-registers in the MNP column are set to 0. The Pass BREAK column shows the commands used to ensure that the modem passes the BREAK signal through (rather than treating it as an "escape-to-command-mode" signal). ------------------------------------------------------------------- Table III. Telebit Modem Features and Commands -----+-------------------+-----+------+------+-----------+--------- | | | | | |Kermit Model| PEP |V.32 | V.42 |MNP |Pass BREAK | Spoof -----+-------------------+-----+------+------+-----------+--------- TB |S50=255 S110=1 | No | No |S95=2 | S54=3 |PEP only TB+ |S50=255 S110=1 | No | ** |S95=2 | S54=3 |PEP only T2000|S50=255 S110=1 | No | ** |S95=2 | S54=3 |PEP only T1000|S50=255 S110=1 | No | No |S95=2 | S54=3 |PEP only T2500|S50=255 S110=1 |S50=6| No |S95=2 | S54=3 |PEP only T1500| No |S50=6| ** |S95=2 | S54=3 |PEP,V.32 -----+-------------------+-----+------+------+-----------+--------- T1600| No |S50=6|S180=2|S180=3|S61=0 S63=0|PEP,V.32 T3000| No |S50=6|S180=2|S180=3|S61=0 S63=0|PEP,V.32 QB | No |S50=6|S180=2|S180=3|S61=0 S63=0|No WB |S50=255S190=1S191=7|S50=6|S180=2|S180=3|S61=0 S63=0|PEP,V.32 -----+-------------------+-----+------+------+-----------+--------- ** For V.42 error control: "S50=0 S95=2 S97=1 S98=3 S106=1". All models but the QBlazer support Kermit spoof (but see below). Group I (old command set): TB = Original TrailBlazer (PEP, MNP, V.22bis, V.22, Bell 212A, 103) TB+ = TrailBlazer-Plus = TrailBlazer + V.42 (but only in new ROMs) T1000 = TrailBlazer-Plus, speed <= 9600, no PEP compression T2000 = TrailBlazer-Plus + SDLC (not used by Kermit, so same as TB+) T2500 = TrailBlazer-Plus + V.32 (9600 bps) T1500 = T2500 minus PEP Group II (new command set): T1600 = V.32, MNP, V.22bis, V.22, V.23, Bell 212A & 103 QB = QBlazer = T1600 without Kermit spoof and minus some other options T3000 = T1600 + V.32bis (14400 bps) WorldBlazer = T3000 + PEP + LZ and V.42bis compression +76800 +115200 bps C-Kermit does not attempt to control whether the modem changes its interface speed to match the connection speed -- that is up to you; you can configure the modem any way you prefer (using S51 or, to some extent on new-style modems S180 and S181), but make sure that the modem's configuration agrees with C-Kermit's DIAL SPEED-MATCHING setting. When DIAL SPEED-MATCHING is ON (the default), C-Kermit changes its interface speed automatically according to the speed reported in the modem's CONNECT message; when it is OFF, C-Kermit does not change speed. Most Telebit modems do not autobaud at speeds above 9600 or 19200 bps unless specially configured to do so, and even then most (maybe all) models will not autobaud at all at 57600 bps. Thus, to make a high-speed modem call with a Telebit, follow these steps: set modem telebit set port com1 ; or whatever set speed 19200 connect Now type AT and carriage return to make sure you get an OK result. Then type: ats51=7 and then carriage return. This changes the Telebit's interface speed to 57600 (use ats51=6 if your modem's or computer's top speed is 38400). Now escape back to Kermit and give these commands: set speed 57600 ; or 38400 set dial speed-matching off set dial mnp on and now you can place a high-speed, error-correcting, data-compressing call. The DIAL KERMIT-SPOOF command is only effective for the Telebit models that supply a Kermit spoof, that is, all but the QBlazer. If the Telebit model is TrailBlazer, TrailBlazer-Plus, T1000, T2000, or T2500, PEP mode is forced even if your SET MODEM command specified a Telebit modem type other than PEP-TELEBIT, because the Kermit spoof only works in PEP mode on those models. On the other models supporting the Kermit spoof, it works on both PEP connections and V.32 MNP (but not V.42) connections. Thus, you might also have to SET MODEM MNP-ENABLE ON in order to get the Kermit Spoof to work on these newer models when making a V.32 connection. SHOW DIAL does not show the complete initialization string for Telebit modems. Telebit modems are initialized in several steps, and the initialization command depends upon your current communication parameters, which model of Telebit modem you have (which C-Kermit learns during the modem initialization process), and other factors. If you use the SET DIAL INIT-STRING command to change the initialization string, this disables the multistep process and uses only the string that you have specified. If you want to use the built-in multi-step process, but you also want to override one or more of the settings that are done in this process, or add additional settings, you can use SET DIAL DIAL-COMMAND to add commands to the dial string (which is normally ATD%s\13), for example "SET DIAL DIAL-COMMAND AT&C1&D2S181=1DT%s\13". ═══ 7.4. Dialing and Flow Control ═══ If you have SET FLOW to any of the hardware options supported by your version of C-Kermit, such as RTS/CTS, and if C-Kermit knows how to set the flow control on your modem, it will do this as part of the DIAL command. Caution: If C-Kermit's FLOW-CONTROL setting is Xon/Xoff or other type of software flow control, C-Kermit will not attempt to change your modem's flow control setting, since software flow control is most commonly used end-to-end. One way to engage Xon/Xoff flow control directly between C-Kermit and the local modem is to change your modem's DIAL INIT-STRING to do it. Hardware flow control options are presently handled only for Telebit modems. On other modem types, you can set the flow control outside of Kermit, or change Kermit's DIAL INIT-STRING. ═══ 7.5. TIES Modems ═══ A "TIES" (Time-Independent Escape Sequence) modem does not require any guard time around its escape sequence. The following text: +++ATH0 if sent through a TIES modem, for example because you were uploading this file through it, could pop the modem back into command mode and make it hang up the connection. Newer versions of the Telebit T1600 and T3000 (version LA3.01E firmware and later), and all WorldBlazers, use TIES. Although the probability of "+++" appearing in a Kermit packet is markedly lower than with most other protocols (see the File Transfer section below), it can still happen under certain circumstances. It can also happen when using C-Kermit's TRANSMIT command. If you are using a Telebit TIES modem, you can change the modem's escape sequence to an otherwise little-used control character such as Ctrl-_ (Control-Underscore): AT S2=31 A sequence of three consecutive Ctrl-_ characters will not appear in a Kermit packet unless you go to extraordinary lengths to defeat more than a few of Kermit's built-in safety mechanisms. And if you do this, then you should also turn off the modem's escape-sequence recognition altogether: AT S48=0 S2=255 But when escape sequence recognition is turned off, "modem hangup" (+++ATH0) will not work, so you should also be sure to SET DIAL MODEM-HANGUP OFF. ═══ 8. OS/2 C-Kermit Wish List ═══ Items marked with (*) require conversion of C-Kermit from a VIO to a PM application.  OS/2-style graphical user interface (*).  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 (*).  LK250/LK450 keyboard support.  MS-DOS Kermit compatible keyboard scan codes.  Improved VT-220 emulation, including character set designation and invocation via ISO 4873 and 2022 rules.  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.  3270 terminal emulation  APPC/CPI-C Network support  A realistic DEC VTxxx font (*) ═══ 9. Further Information ═══ Additional information is available from a variety of sources: Kermit News News and articles about Kermit software and protocol are published periodically in our journal, Kermit News. Subscriptions are free of charge. To subscribe, send your complete postal address by email to knews@columbia.edu, or contact Columbia University. USENET Newsgroups The Kermit Development Group maintains an active presence in the USENET community. As of this writing there are two newsgroups dedicated to Kermit software and protocol:  comp.protocols.kermit.announce (moderated)  comp.protocols.kermit.misc (unmoderated) The following OS/2-specific groups are also visited periodically:  comp.os.os2.announce  comp.os.os2.apps  comp.os.os2.misc  comp.os.os2.networking.tcp-ip World Wide Web The Kermit Development Group maintains an active Home Page on the World Wide Web which to provide up-to-date product information. You may access the Kermit Home Page at URL http://www.columbia.edu/kermit/ with IBM OS/2 WARP's WebExplorer via the Internet Access Kit (SLIP or PPP) , or via a LAN Client or TCP/IP 2.0 connection, or any other Web browser. Electronic Mail You may send inquiries by e-mail to the Internet address kermit@columbia.edu. FTP Kermit communication software for hundreds of different platforms is available via Internet anonymous FTP from kermit.columbia.edu in the /kermit directory hierarchy. The latest distribution of OS/2 C-Kermit is found in the /kermit/archives directory with a file name ckoxxx.zip, where xxx is the current edit number, such as cko191.zip. Transfer it in binary mode, unzip it, then install it. If you obtain Kermit software in this way, please also purchase the appropriate documentation. ═══ 10. Technical Support ═══ Technical support for Kermit software is available from Columbia University on a best-effort basis. Our tech support resources are limited, so please do your best to help out by following these steps: 1. First look for the answer to your question in the book Using C-Kermit. Most questions of a general nature are answered there. Use the index, table of contents, command reference, and glossary for help in locating the appropriate material. If you do not have the book, please purchase it. Please do not request tech support from Columbia University without having first consulted this book. 2. Look in CKERMIT.INF (this file), which contains lots of OS/2-specific information, supplemental to what is in Using C-Kermit. Use the VIEW program (or C-Kermit's UPDATES command) to access this file, which is fully indexed and searchable. 3. If you are using Kermit software within a company or institution that recommends and supports it, contact your local support staff for help. 4. If you have USENET access, look in or post your question to the appropriate newsgroup, such as comp.protocols.kermit or comp.os.os2.apps. Questions answered in this type of forum serve a broad audience rather than just one person. 5. If you have FTP access, retrieve the Kermit "FAQ" (Frequently Asked Questions file) via anonymous FTP to kermit.columbia.edu, file kermit/faq.txt. 6. If you still need help, you may send an inquiry by e-mail to kermit@columbia.edu. 7. If you still need help and you don't have email access to us, then, you may contact us directly by phone, fax, or post. ═══ 11. Contact Information ═══ Contact information: Kermit Development and Distribution Columbia University Academic Information Systems 612 West 115th Street New York, NY 10025 USA Telephone: (USA) +1 212 854-3703 (business) or -5126 (tech support) Fax: +1 212 663-8202 or +1 212 662-6442 Email: kermit@columbia.edu Web: http://www.columbia.edu/kermit/ Telephone hours are 9:00am to 4:00pm United States Eastern Time, Monday through Friday; closed Saturdays, Sundays, and Holidays. ═══ ═══ Using MS-DOS Kermit, by Christine M. Gianone, Digital Press (1992), 1-55558-082-3. ═══ ═══ Kermit, A File Transfer Protocol, by Frank da Cruz, Digital Press (1987), ISBN