CTOS Kermit Distribution Notes, January 1993 CTOS Kermit is based on an old release of C-Kermit (4.2, March 1985), before the naming convensions for C-Kermit changed. It is not at all source compatible with the current version of C-Kermit (though it is expected that a future release will be). Original Name Distribution Name Comments CKCMD.C CTCMD.C CKCMD.H CTCMD.H CKCONU.C CTCONU.C CKCT.RUN CTCT.HEX Binary translated to hex (see below) CKCTDIR.C CTCTDIR.C CKDEBU.H CTDEBU.H CKDIAL.C CTDIAL.C CKERMI.DOC CTKERM.DOC CTOS-Kermit 2.00 manual, with CTOS specifics CKERMI.H CTERMI.H CKFNS.C CTFNS.C CKFNS2.C CTFNS2.C CKLOGI.C CTLOGI.C CKMAIN.C CTMAIN.C CKPROT.C CTPROT.C CKPROT.W CTPROT.W CKUSER.C CTUSER.C CKUSER.H CTUSER.H CKUSR2.C CTUSR2.C CKUSR3.C CTUSR3.C CKVT100.C CTVT10.C CKWART.C CTWART.C CKWART.DOC CTWART.DOC CKXCTOS.C CTXCTO.C CKZCTOS.C CTZCTO.C DIALEX.DOC CTDIAX.DOC Sample login script KERMLIB.FLS CTLIB.FLS README.DOC CTAAAA.DOC This file SAMGEN.ASM CTSAMG.ASM WART.RUN CTWART.HEX Binary translated to hex -----(cut here)----- /* UNHEX.C - Program to translate a hex file from standard input * into an 8-bit binary file on standard output. * Christine M. Gianone, CUCCA, October 1986. * * Modified - Evan Arnerich, ITT/FSC, January 1993 * added arguments for in/out file specs */ #include /* Include this for EOF symbol */ char a, b; /* High and low hex nibbles */ /* Main program reads each hex digit pair and outputs the 8-bit byte. */ main(argc, argv) int argc; char *argv[]; { FILE *in_fp, *out_fp; if ((in_fp = fopen(argv[1], "r")) == NULL) { printf("error opening %s\n", argv[1]); exit(1); } if ((out_fp = fopen(argv[2], "w")) == NULL) { printf("error opening %s\n", argv[2]); exit(1); } while ((a = getc(in_fp)) != EOF) { /* Read first hex digit */ if (a == '\n') /* Ignore line terminators */ continue; if ((b = getc(in_fp)) == EOF) /* Read second hex digit */ break; putc( ((decode(a) * 16) & 0xF0) + (decode(b) & 0xF), out_fp ); } fclose(in_fp); fclose(out_fp); exit(0); /* Done */ } decode(x) char x; { /* Function to decode a hex character */ if (x >= '0' && x <= '9') /* 0-9 is offset by hex 30 */ return (x - 0x30); else if (x >= 'A' && x <= 'F') /* A-F offset by hex 37 */ return(x - 0x37); else { /* Otherwise, an illegal hex digit */ fprintf(stderr,"Input is not in legal hex format\n"); exit(1); } } ----(cut here)---- January 5, 1988 Welcome to CTOS Kermit. I hope that you can use this. First, a few words about the program. Read CKERMI.DOC and this will give you an idea of how this version works. I have not edited that file, it is the UNIX distribution version, but most of what is says still applies. I used the WART program to generate CKPROT.C, as is intended. However, CKPROT.C did not compile cleanly, and I wanted some more debug info, so I directly tweaked the source for CKPROT. If you regen CKPROT.C from WART, you will probably have to do the same, unless you modify WART. Please don't take the source code presented here to be a shining example of my philosophy of "C" coding. I took the code as it was distributed and changed it as little as possible to get it working. Even the files I rewrote (CKZCTOS.C and CKXCTOS.C) were created from the old skeletons. ****PROBLEMS AND LIMITATIONS**** - Server mode is sometimes flaky. If you start up the server and quickly make a request of it, the server works fairly well. Otherwise, it can get stuck and you have to use ACTION-FINISH. However, this may only happen on NCR operating systems (mine). I heard from a friend who used this program to talk to a VAX and left CTOS-Kermit in server mode for six hours and everything worked fine. - The Shell command is not implemented. - Wild cards are not implemented. - Remote commands are not implemented. These are commands passed to a remote system for execution. They are necessarily system dependant. I was not sure what OS I wanted to set them up for, so I didn't set them up at all. - Command line parameters work, but remember that you have to enter them in the CTOS command form via "run file". If a parameter has 2 parts, and they are separated by a space, they occupy 2 CTOS parameters. Also, prefix the parameter flags with "-" just like you would on a UNIX command line. - This version has VT101 emulation. I have added support for some VT100 character attribute commands, such as bold and reverse video. It isn't perfect, but is is good enough to run 'vi' and DEC's All-in-1. Use 'set terminal vt100' to select this, and 'set terminal none' to select TTY. The keyboard is used as follows: :Cursor keys are implemented :F1 through F4 are themselves :F8 is an emergency reset; press this if emulation is screwed up :F9 toggles the reverse video mode :F10 toggles CR/LF mode :Delete is break :Code (Supershift for you NCR people) is Control :Code + Shift is used for the VT100 application key pad mode with the Convergent numeric key pad :Code + Shift F1 to F4 are F1 to F4 in AKP mode :Escape is generated by pressing GO twice. GO is the default local escape (to get back to kermit). If you change this with the 'set escape' command, you will not be able to send escape (0x1b). Escape is also transmitted on the VT101 keyboard by Control+[, but this CT keyboard code conflicted with one I used on the AKP, so I deleted this feature. If you press GO once and then enter '?', it will tell you the options. There are two VT100 object modules possible with the source 'ckvt100.c'. If you compile with a define 'NCR=1', it will use the keyboard encoding table that NCR used with their OS 4.6 and below. If you omit this define, it uses the CT standard encoding table. Link the appropriate one with the rest of the objects if you want to change things. At the 'CTOS-Kermit' prompt, type 'show version' and look at the last line to see the keyboard version. I'm sure that there are a lot more things wrong with this, but this small list should get you started! If you find bugs, please let me know. I am going to continue to slowly work on this project as time permits. Joel Dunn UNC Chapel Hill Administrative Data Processing CB #1150 Chapel Hill, NC 27599-1150 919-966-5879 {backbone}!mcnc!ecsvax!joeld.UUCP {backbone}!mcnc!unc!dunn.UUCP rjd@unc.BITNET 73200,640 COMPUSERV ------------------ January 22, 1988 The following changes and (hopefully) improvements were made to CTOS-Kermit in an effort to bring it up (somewhat) to the current state of funcionality of UNIX and MS-DOS Kermit. The CTKERM.DOC file has been somewhat updated to reflect differences between CTOS and UNIX Kermit, and the changes out- lined below. (1) Commands added: TAKE The TAKE command specifies a file name whose contents are executed as Kermit commands. When all commands in the TAKE file are executed, control is returned to the file where the TAKE originiated. 20 levels of TAKE are supported. POP POP is used to return from a TAKE file prior to the end of file. INPUT, REINPUT Wait a specified period for a string to be received over the comm line. Result can be tested using the IF command (below). OUTPUT Send a specified string out the comm line. Together, the INPUT, REINPUT, and OUTPUT commands replace the SCRIPT command. Syntax of all three commands follow MS-DOS Kermit standards. IF {SUCCESS, FAILURE, COUNT, EQUAL, DEFINED, EXIST} If the condition is met, the command following the IF clause is executed. SUCCESS and FAILURE test the results of the last operation. The IF COUNT is used in conjuction with the COUNT value in loops. The IF COUNT command decrements the count variable, and if the result is greater than zero, executes the following command. A separate count variable is maintained for each take level. The IF EQUAL compares two strings. Either or both may reference Kermit variables. The IF DEFINED succeeds if the variable referenced is non-null. The IF EXIST succeeds if file named exists. SET MODEM RACAL This allows dialing using the DIAL command with the internal Racal modem used in the US Army's Unisys TACCS and TACCSE computers. ASSIGN Set a Kermit variable to a string value. 26 variables (\\%A through \\%Z) are supported. Each variable can hold up to 20 characters. ASK, ASKQ Prompt the operator for string data to be stored in a Kermit variable. ASK echos operator input to screen, ASKQ does not. SHOW MACRO Display the values stored in all 26 Kermit variables. DELETE Delete a file on the local system. GOTO Branch to a statement other than that immedialtely following. Labels are identified as strings preceded by a colon in the first column of the statement. HANGUP Drop DTR so that the modem hangs up the phone line. New command line argument A new command line argument (-O) allows kermit commands to be specified on the command line. Virtually any command can be entered following the '-O' and are executed after any commands in the .kermrc file. (2) The following commands were modified to work better/properly: SET PARITY, SET FLOW-CONTROL These now modify the hardware to get the desired effect. SET END-OF-PACKET Previously, this command told the other system what we expected as an end of packet character, but didn't change our out-going end-of-packet character. SET TIMEOUT, RETRY Previously, the timeout and retry values was not adjustable, causing file file transfer failures when long delays were encountered. SHOW The SHOW command was modified to better display the current operating paramters. EXIT Added an optional argument to the EXIT command. This value is returned to the operating system when Kermit exits. REMOTE CMDS These have been modified to work a little better. Evan Arnerich / Doug Drury ITT/FSC 2810 Industrial Parkway Santa Maria, CA 93455 805-928-4371