IBM System/370 MVS/TSO Kermit 4.3.n Installation Instructions (1998 February) The following instructions cover the installation of two command processors under MVS, namely, GUPI and KERMIT. GUPI could be installed for its own sake but is included here primarily because it is a tool needed in installing KERMIT. Indeed, GUPI is used for installing not only MVS/TSO Kermit, but also CICS/OS/VS Kermit. * * Installation Procedure * * 1) Get the necessary files from the Kermit distribution tape or from BITNET KERMSRV or elsewhere into your disk area. Note that many of the files are generic for Kermit-370 and may already be available to you from a local CMS site. As distributed by Columbia, the files are named as follows, all with prefix IKT or IK0 (I K Zero): IKTAUX.CMD Sample CLIST's PC, KERMAIL, etc. * IKTDYN.ASM Assembler source for DYNALC subroutine * IKTGUP.ASM Assembler source for TSO-specific part of GUPI * IKTGUP.HLP GUPI help file, TSO HELP format IKTKER.BWR A "beware" file, listing known bugs, problems, and fixes IKTKER.DOC TSO Kermit User Guide, plain text IKTKER.HLP Kermit-TSO help file, TSO HELP format * IKTKER.INS Kermit-TSO installation instructions (this file) IKTKER.UPD Updates for TSO version of Kermit-370 * IKTMAC.ASM Assembler source for TSO-specific macros IKTUTL.ASM Assembler source for TSO-specific routines IK0CMD.ASM Assembler source for command handler IK0COM.ASM Assembler source for global code IK0DEF.ASM Assembler source for parameter definitions IK0DOC.ASM Assembler source with brief history * IK0GUP.ASM Assembler source for generic update program GUPI IK0KAN.ASM Assembler source for Kanji character translation * IK0MAC.ASM Assembler source for generic Kermit macros IK0MAI.ASM Assembler source for storage initialization IK0PRO.ASM Assembler source for generic routines The files marked with asterisks are the ones necessary for installing GUPI. Those, along with the rest, are needed for KERMIT. The following files are not necessary for installation, but may be of some interest. IKCACT.ASM Assembler source for optional accounting exit routine IKTHDR.MSS Scribe source for producing IKTKER.DOC IKTKER.ANN Text of Kermit-TSO announcement for current version IKTKER.LPT Paged equivalent of IKTKER.DOC IKTKER.MSS Scribe source for TSO part of IKTKER.DOC IKTKER.PS PostScript equivalent of IKTKER.DOC IKTMVS.HLP Description of TSO-specific features IK0AAA.HLP Kermit-370 implementation notes, supported environments IK0CON.HLP Notes on supporting other terminal controllers IK0KER.ANN Text of generic Kermit-370 4.3 announcement IK0KER.MSS Scribe source for generic part of IKTKER.DOC IK0KER.UPD Update history for Kermit-370 IK0POR.HLP Notes on porting Kermit-370 to other systems IK0VCS.PKT Czech-language version of Kermit-370 source (updates) IK0VDE.PKT German-language version of Kermit-370 source (updates) IK0VER.FOR Comparison program for generating update decks IK0VES.PKT Spanish-language version of Kermit-370 source (updates) IK0VFI.PKT Finnish-language version of Kermit-370 source (updates) IK0VFR.PKT French-language version of Kermit-370 source (updates) IK0VIT.PKT Italian-language version of Kermit-370 source (updates) IK0VNL.PKT Dutch-language version of Kermit-370 source (updates) IK0VPL.PKT Polish-language version of Kermit-370 source (updates) IK0VPT.PKT Portuguese-language version of Kermit-370 source (updates) IK0VRU.PKT Russian-language version of Kermit-370 source (updates) 2) Allocate datasets to contain the assembled and executable code as follows. The allocation sizes here are based on "typical" disk models; each dataset should be roughly 200K in extent. You may wish to specify the primary space parameter so as to match that require- ment. However, if you wish to reuse either dataset for successive test versions or new releases, you must be sure to make a generous space allocation. Both libraries may be compressed from time to time to make "dead" storage available, but the load library will tend to grow as new releases are added. It is probably most convenient to use the following TSO commands to allocate the datasets. Note: throughout these instructions, the block size used for objects is 1680, the traditional maximum -- feel free to change it to the customary value at your site. ATTR K1OBJ RECFM(FB) LRECL(80) BLKSIZE(1680) DSORG(PO) ALLOC DSN(KERMIT.OBJ) USING(K1OBJ) SPACE(20,20) TRACKS DIR(5) ATTR K1LOD RECFM(U) BLKSIZE(6144) DSORG(PO) ALLOC DSN(KERMIT.LOAD) USING(K1LOD) SPACE(20,20) TRACKS DIR(10) The corresponding JCL is: // EXEC PGM=IEFBR14 //K1OBJ DD DCB=(RECFM=FB,LRECL=80,BLKSIZE=1680,DSORG=PO), // DSN=.KERMIT.OBJ,SPACE=(TRK,(20,20,5)), // DISP=(NEW,CATLG),UNIT=whatever //K1LOD DD DCB=(RECFM=U,BLKSIZE=6144,DSORG=PO), // DSN=.KERMIT.LOAD,SPACE=(TRK,(20,20,10)), // DISP=(NEW,CATLG),UNIT=whatever 3) Rename and reformat, if necessary, the source files on disk. Collect all the source files (those with extensions of ".ASM") in your disk area with names as shown above, and make sure that all have the same block size, record length, and record format. The initial values for these parameters will depend on the way you obtained the files. They need not follow the traditional pattern for assembler sources (RECFM=FB,LRECL=80); any format compatible with QSAM is acceptable. You will also need IKTKER.UPD, and any local updates or optional updates chosen from IKTKER.BWR should also be collected into one or more files for application to the source; the JCL given below uses the name IKTKER.LCLUPD as an example for such optional updates. If there are multiple update files, they must all have the same DCB parameters, though not necessarily the same as the source files. In particular, they must not be reformatted to a fixed record length unless the short records are extended with blanks in the process. These files are all "raw" materials that will be combined to form the source actually supplied to the assembler. 4) Copy IKTKER.HLP into the system Help library with a member name of KERMIT so that the TSO HELP KERMIT command and Kermit-TSO's built-in HELP subcommand can find it. Similarly, copy IKTGUP.HLP into member GUPI. The most comprehensive documentation is the pair of chapters of the Kermit User Guide dealing with TSO, namely, the generic Kermit-370 chapter and the TSO-specific one. These two are bundled together in IKTKER.DOC and also in IKTKER.PS; the PostScript is suitable only for printing, but the DOC file could also be stored wherever you keep online documentation files, renamed appropriately. 5) The Generic Update Program for IBM-370 (GUPI) handles standard update information in the format found in IKTKER.UPD. Like Kermit itself, GUPI is composed of a generic part and a TSO-specific part. The former consists of IK0GUP.ASM plus parts of IK0MAC.ASM, and the latter similarly consists of IKTGUP.ASM plus parts of IKTMAC.ASM. Unlike Kermit, GUPI is both a TSO command processor and an ordinary batch program. The following batch job creates the executable program GUPI and uses it to apply the available updates to Kermit and then creates the executable load module KERMIT. Although the job is as generic as possible, there may be local variations. You must tailor the job to your site by (a) supplying an appropriate JOB card (the JOB card should insure, if necessary, a region of at least 2560K to allow execution of the assembler and GUPI), (b) changing the string "" into the top-level qualifier of your disk area, (c) changing, if necessary, the name of the assembler, perhaps to IFOX00, and selecting the right DDNAME for the object output (note that MVS/XA and MVS/ESA both generally require that you use IEV90 because of petty changes in SYS1.MACLIB, but MVS/SP does not ordinarily have IEV90), (d) specifying, if necessary, a generous print limit to allow the 15,000 or more lines generated by the job, (e) changing, if necessary, the BLKSIZE of the macro library for GUPI (defined by DD statement GUPLIB.SYSUT2) to be as large as that of SYS1.MACLIB, (f) un-commenting, if necessary, the references to SYS1.AMODGEN and SYS1.MODGEN for access to the STATUS and OBTAIN macros in assembling GUPI and Kermit, (g) un-commenting, if desired, the reference to the optional local update data set for input to GUPI (in step KRMUPD) or adding any other desired update data sets to the concatenation under ddname SYSIN, (h) un-commenting, if desired, the references to the optional Kermit accounting exit routine KACCT, and (i) commenting out, if desired, the reference to IK0KAN.ASM (including it adds about 32 Kbytes to the Kermit load module). An abbreviated form of the job may be run to apply additional updates after the initial installation (simply omit job steps CNVASM through GUPLNK). You will also wish to use a new NAME for each new version of the load module. On the other hand, another abbreviated form of the job may be run for just the purpose of installing (or reinstalling) GUPI. For that, simply omit all steps after GUPLNK. //JOBLIB DD DSN=.KERMIT.LOAD,DISP=OLD //* INPUT: .IK*.ASM, .IKTKER.UPD //* OUTPUT: .KERMIT.LOAD, .KERMIT.OBJ (both pre-allocated) //* //KASM PROC PRM=,USRMAC='SYS1.MACLIB',MEMBER=NULL, // USRMAC2='SYS1.MACLIB' //ASM EXEC PGM=IEV90,PARM='NORLD,NODECK,OBJECT,&PRM' //SYSIN DD DSN=&SOURCE,DISP=(OLD,PASS) //* SYSGO DD DDNAME=SYSLIN (uncomment if assembler wants SYSGO) //SYSLIB DD DSN=&USRMAC,DISP=(SHR,PASS) // DD DSN=&USRMAC2,DISP=(SHR,PASS) // DD DSN=SYS1.MACLIB,DISP=SHR //SYSLIN DD DSN=.KERMIT.OBJ(&MEMBER),DISP=(OLD,PASS) //SYSPRINT DD SYSOUT=* //SYSUT1 DD UNIT=SYSDA,SPACE=(CYL,(5,2)) //SYSUT2 DD UNIT=(SYSDA,SEP=SYSUT1),SPACE=(CYL,(5,2)) //SYSUT3 DD UNIT=(SYSDA,SEP=SYSUT1),SPACE=(CYL,(5,2)) // PEND //KLINK PROC //LNK EXEC PGM=IEWL,PARM='REUS,LET' //SYSLMOD DD DSN=.KERMIT.LOAD,DISP=OLD //SYSPRINT DD SYSOUT=* //SYSUT1 DD UNIT=SYSDA,SPACE=(CYL,(5,2)) // PEND //* //* ---------------- CUT HERE AFTER 1ST SUBMISSION ---------------- //* Create exit routine for IEBGENER //CNVASM EXEC KASM //SYSIN DD * UPDCNV0 START SAVE (14,12),,* USING UPDCNV0,15 LM 1,2,0(1) Get parms LH 3,82(2) LRECL LH 4,62(2) BLKSI AR 4,1 End of buffer TM 36(2),X'40' RECFM=V? BO QUIT Yes, error CVTLP CLC =C'*COPY ',0(1) BNE NOTCOPY CLC 5(48,1),6(1) BNE NOTCOPY MVC 0(12,1),=C'./ ADD NAME=' MVC 12(8,1),54(1) Copy name into ADD stmt NOTCOPY AR 1,3 Space over record CR 1,4 BL CVTLP Finish block SR 15,15 QUIT RETURN (1,12),RC=(15) END UPDCNV0 //SYSLIN DD DSN=&&UPDC,DISP=(NEW,PASS),UNIT=SYSDA,SPACE=(CYL,(1,1)), // DCB=(RECFM=FB,LRECL=80,BLKSIZE=1680) //* Link into job library //CNVLNK EXEC KLINK //SYSLIN DD DSN=&&UPDC,DISP=(OLD,DELETE) // DD * NAME UPDCNV0(R) //* Assemble DYNALC //DYNCPY EXEC PGM=IEBGENER //SYSIN DD DUMMY //SYSPRINT DD DUMMY //SYSUT1 DD DSN=.IKTDYN.ASM,DISP=SHR //SYSUT2 DD DSN=&&DYN,DISP=(NEW,PASS),UNIT=SYSDA,SPACE=(CYL,(1,1)), // DCB=(RECFM=FB,LRECL=80,BLKSIZE=6160) //DYNASM EXEC KASM,SOURCE='&&DYN',MEMBER=DYNALC //* Create sequential file for GUPI macro library //GUPCPY EXEC PGM=IEBGENER //SYSIN DD * GENERATE EXITS DATA=UPDCNV0 //SYSPRINT DD DUMMY //SYSUT1 DD DSN=.IK0MAC.ASM,DISP=SHR // DD DSN=.IKTMAC.ASM,DISP=SHR // DD DSN=.IKTGUP.ASM,DISP=SHR //SYSUT2 DD DSN=&&GUP,DISP=(NEW,PASS),UNIT=SYSDA,SPACE=(CYL,(1,1)), // DCB=(RECFM=FB,LRECL=80,BLKSIZE=2400) //* Create GUPI macro library //GUPLIB EXEC PGM=IEBUPDTE,PARM=NEW //SYSIN DD DSN=&&GUP,DISP=(OLD,DELETE) //SYSPRINT DD DUMMY //SYSUT2 DD DSN=&&GUPMAC,DISP=(NEW,PASS),UNIT=SYSDA, // SPACE=(TRK,(1,1,10),RLSE), // DCB=(RECFM=FB,LRECL=80,BLKSIZE=6160) //* Assemble and link GUPI //GUPCPX EXEC PGM=IEBGENER //SYSIN DD DUMMY //SYSPRINT DD DUMMY //SYSUT1 DD DSN=.IK0GUP.ASM,DISP=SHR //SYSUT2 DD DSN=&&GUPX,DISP=(NEW,PASS),UNIT=SYSDA,SPACE=(CYL,(1,1)), // DCB=(RECFM=FB,LRECL=80,BLKSIZE=6160) //GUPASM EXEC KASM,SOURCE='&&GUPX',MEMBER=GUPI, // USRMAC='&&GUPMAC' //* ,USRMAC2='SYS1.MODGEN' May be needed for OBTAIN //GUPLNK EXEC KLINK //SYSLIN DD DSN=.KERMIT.OBJ(GUPI),DISP=SHR // DD DSN=.KERMIT.OBJ(DYNALC),DISP=SHR // DD * NAME GUPI(R) //* Assemble optional accounting exit //* ACTASM EXEC KASM,SOURCE='.KACCT.ASM',MEMBER=KACCT //* ---------------------- END OF CUT ------------------------ //* //* --------------- STOP HERE IF ONLY INSTALLING GUPI ------------- //* Create updated Kermit ... //KRMUPD EXEC PGM=GUPI,REGION=2560K //SYSIN DD DSN=.IKTKER.UPD,DISP=SHR //* DD DSN=.IKTKER.NUP,DISP=SHR Optional //* DD DSN=.IKTKER.LCLUPD,DISP=SHR Optional //SYSPRINT DD SYSOUT=* //SYSUT1 DD DSN=.IK0DOC.ASM,DISP=SHR // DD DSN=.IK0MAC.ASM,DISP=SHR // DD DSN=.IKTMAC.ASM,DISP=SHR // DD DSN=.IK0DEF.ASM,DISP=SHR // DD DSN=.IK0MAI.ASM,DISP=SHR // DD DSN=.IK0COM.ASM,DISP=SHR // DD DSN=.IK0CMD.ASM,DISP=SHR // DD DSN=.IKTUTL.ASM,DISP=SHR // DD DSN=.IK0KAN.ASM,DISP=SHR Optional // DD DSN=.IK0PRO.ASM,DISP=SHR //SYSUT2 DD DSN=&&UPDSRC,DISP=(NEW,PASS),SPACE=(CYL,(2,1)), // DCB=(RECFM=FB,LRECL=80,BLKSIZE=6160),UNIT=SYSDA //* //KRMASM EXEC KASM,SOURCE='&&UPDSRC',MEMBER=KERMIT,COND=(0,LT,KRMUPD) //* ,USRMAC='SYS1.AMODGEN' May be needed for STATUS //* ,USRMAC2='SYS1.MODGEN' May be needed for OBTAIN //KRMLNK EXEC KLINK,COND=((0,LT,KRMUPD),(4,LT,KRMASM.ASM)) //SYSLIN DD DSN=.KERMIT.OBJ(KERMIT),DISP=SHR // DD DSN=.KERMIT.OBJ(DYNALC),DISP=SHR //* DD DSN=.KERMIT.OBJ(KACCT),DISP=SHR Optional // DD * ALIAS KERMIT NAME KERM432(R) // Note 1: If you prefer, you may elect to keep the source files in a PDS. If so, change the DSN references in the job accordingly. Note 2: The procedure given above assumes the availability of sources contemporaneous with this file, i.e., release 4.3 of Kermit-370. Note 3: The procedure given above preserves the sequence numbers in columns 73-80 of the source files. If you elect to use an editor to merge files, be absolutely sure that you don't inadvertently lose the original sequence numbers (something editors are prone to do). Note 4: The resulting load library KERMIT.LOAD must be placed in the link list so that the KERMIT load module will be treated as a COMMAND PROCESSOR (if not in SYS1.LINKLIST, then either concatenated to the STEPLIB for the default LOGON PROC or made known to all potential Kermit users, so that they can do the concatenation themselves). One way of testing a newly installed Kermit is to invoke it under TEST with the CP option. Note 5: The suggested scheme of naming Kermit load modules is indicated in the above job. Version 4.3.0 would be named KERM430, 4.3.1 would be KERM431, and so on. The latest version would have an alias of KERMIT. If old versions are kept indefinitely, the load library will, of course, grow. 6) Install any desired auxilliary commands from IKTAUX.CMD. These are sample CLIST's and may need to be tailored to your site. The PC command, for example, assumes that the TERMINALS macro is defined in your PC Kermit as "SERVER,CONNECT". KERMAIL and KERMPRT must be set up according to the local options and facilities for e-mail and print, respectively. 7) To run Kermit-TSO, simply type "KERMIT" to the TSO system prompt. * * Alternate Languages * * Kermit-370 now can be installed in a variety of languages. The messages within Kermit have been gathered into a few places in the code, and they can all be replaced during installation with those of a chosen language. The replacements are contained in distribution files with names like ik0vXX.pkt, where "XX" is the two-letter language code according to ISO 639. These files contain the messages in an encoded form using only the character repertoire of ASCII, so that even the extended characters can pass successfully through a variety of transmission mechanisms. Here are the instructions for applying the changes: 1. Use Kermit itself to decode the language-specific update file into the proper IBM code page. To do this, start Kermit (4.2.6 or higher) and then select the desired code page, e.g., SET FILE CHARACTER-SET CP500 Then tell Kermit to use ik0vXX.pkt, via SIMULATE IK0Vxx.PKT RECEIVE Kermit will then quickly decode and (attempt to) store the file with the name ik0vXX.upd. If you already have a file of that name, the FILE COLLISION setting will determine what happens (overwrite the original, pick a new name for the new file, or whatever). 2. ik0vXX.upd contains the updates for all four major variants of Kermit-370, and you must edit the file to remove the parts that are not applicable. The edited file should be combined with the other updates for the current release of the variant you are installing. 3. Concatenate the TSO and generic parts of ik0vXX.upd to the normal updates in the installation batch job and re-run it. * * Accounting Routine * * If you wish to use the optional accounting exit routine with Kermit, you must create the object for it and load it explicitly with Kermit. The sample currently available was written for CMS and must be adapted to run under MVS/TSO. Any user who does so is urged to contribute the TSO version for inclusion in the Kermit distribution under the name IKTACT.ASM. Even when such a TSO-specific sample is available, you should examine the source and customize it to your installation's needs before using it. The tailored version is assumed to be called KACCT.ASM in the relevant lines of the batch job above (currently all commented out). * * Configuration * * The IBM mainframe and its communications front end (3705, 7171, etc.) usually require that parity be used by any asynchronous ASCII device that wishes to communicate with it. Exactly which kind of parity is site-dependent. At Columbia, the 3705 requires Mark parity, and the 7171 requires Even parity. Make sure your users know to use the appropriate parity setting, as well as any other settings required for IBM mainframe communication (see p.36-39 of the Kermit book). For linemode transfers, the ASCII/EBCDIC translation in the front end is a key factor. Kermit-TSO uses an ASCII/EBCDIC translation table which conforms to the one given in the IBM System/370 Reference Summary. If your site's translation table is incompatible with the one Kermit uses, then enter the appropriate SET ATOE/ETOA/TATOE/TETOA subcommands in the system KERMINI file. As long as the system tables are invertible with respect to the printable ASCII characters (even if the A-to-E and E-to-A tables are not the inverses of each other), the SET subcommands can compensate. However, if your system's ASCII/EBCDIC tables are not invertible, Kermit will not and cannot work unless you change your system's tables. Refer to the generic Kermit-370 chapter of the User's Guide for a step-by-step customization procedure (see the section on translation tables). Kermit may also need to be configured because of a problem with VTAM for line-mode terminals -- in some versions of VTAM, there is no standard mode for transmitting the normal packet character SOH (code 1, CTRL-A), even though Kermit-TSO automatically detects the presence of VTAM and switches from TTY to VTAMTTY. A suitable substitute packet character is HT (code 9, CTRL-I). Alternatively, installing the VTAM exit routine IKTWTX1 will give local control over selection of characters to pass through to the terminal. Kermit-TSO operation is possible for most types of protocol converters; for best results, the converter should have a transparent mode. If possible, be sure the converter is configured so that the graphics or transparent mode, whatever it is called, is enabled. See IK0AAA.HLP for a list of front ends that are known to work and for a collection of notes and special warnings about some of them. Some further installation details follow for specific devices. When TSO Kermit is to be used with a 7171, make sure the 7171 is set up with its "keyboard lock delay" parameter set to 0. Otherwise, the "terminal" will hang whenever TSO Kermit clears the screen. This happens consistently when the parameter is set to 10, and not at all when set to 0. For numbers in between, the higher the number, the more it happens. There is another problem in the 7171 that can cause Kermit file transfers to abort after a flurry of retransmissions if XON/XOFF flow control is used by the receiving Kermit, or even by hardware in between the 7171 and the receiver. To prevent this problem, set the 7171 flags so that XOFF is not a valid terminator of a transparent read. See page 4-20 of "IBM 7171 Reference Manual and Programming Guide" (IBM publication number GA27-0021). Kermit operation is possible through an IBM 3708 front end in two different configurations. In the first, the terminal line must be set for either "protocol enveloping" or "dynamic" mode, and a session must be set for line-at-a-time operation for Kermit to work. Other important details of the terminal configuration are: (1) the terminal must be specified as a TWX device, (2) the SSCP format should be set to USSNTO, (3) the terminal type ID should be set to 05, (4) the line should be set for 8, or possibly 7, data bits and 1 stop bit, (5) there should be no "read prompt", and (6) the so-called "alternate" translation table (number 3) should be selected. Kermit-TSO may also need to be configured because some models of the 3708 (or some environments) do not pass the normal packet character SOH (code 1, CTRL-A). A suitable substitute is HT (code 9, CTRL-I). Alternatively, or additionally, it may help to set the 3708 "interface type" to 0. CONTROLLER must be set to TTY (or VTAMTTY if connected through TSO/VTAM without the IKTWTX1 exit), but those are the defaults. The second possible 3708 configuration is "protocol conversion" mode and makes use of the FULLSCREEN type in Kermit, which is also suitable for many other kinds of protocol converter. The basic setup consists of the following Kermit subcommands. .... mainframe ..... ....... PC ......... SET CONTROLLER FULL set send start 62 SET RECEIVE START 62 set receive start 62 SET SEND START 62 set block b SET BLOCK B set handshake none SET HANDSHAKE 0 The 62's (Greater-than sign) may be replaced by some other decimal code for a printable character. For best results, choose a character that seldom appears in the files you will be transferring. In particular, avoid the Control, Eighth-bit, and Repeat prefixes. Packet sizes are automatically restricted by Kermit-TSO, so you needn't set them unless conditions require packets shorter than the default (77). Flow control may be needed to keep up with the data rate on some equipment. The block check type should be set to "B" only if the protocol converter is overzealous in optimizing the data stream -- there are hazards in using any type other than "1" because of all the packet echoing. Refer to IK0AAA.HLP for such details. Note that the translation of characters imposes the same setup requirements on FULLSCREEN mode as on the traditional TTY or VTAMTTY modes (linemode). See the DOC. Kermit-TSO supports file transfers through the IBM 3174 AEA with B2 or higher microcode, but support is restricted to terminals with the ASCII Graphics capability in three ways that may require compensating installation: a) The terminal type must be defined in the 3174 to support graphics (only the built-in VT241 and Tektronix 4205 types plus suitable user-defined terminal types). IBM's AEA Reference describes how to set up terminal tables. b) The line must be defined without a Host Addressable Printer. c) If the 3174 is owned by VTAM, the connection must be made with a logmode that allows the Read Partition Query (such as M2SDLCQ).